google_boy 发表于 2016-5-13 23:04:13

十六进制输出问题

#include <stdio.h>

int main()
{
        short a;
        a=0xf001;
        printf("%x\n",a);
       
        return 0;
}

为什么输出的是fffff001?

n0noper 发表于 2016-5-14 09:10:59


根据反汇编结果得知:

%x/%X 所需要的数据长度是4字节,但是你的short是2字节,所以在a传递的时候,编译器做了一个扩展
使用movsx指令, 就是低字的最高位来填充高字,组成一个双字(4字节).

例如,0xF001 - 最高位为1 (化作2进制,一目了然)
然后高字扩展的时候就为0xFFFF了,所以结果就是0xFFFFF001

有啥问题,再讨论。

google_boy 发表于 2016-5-14 11:47:41

理解了,谢谢

google_boy 发表于 2016-5-14 11:50:40

可是如果是正数的话,输出却只有两个字节?

google_boy 发表于 2016-5-14 11:53:45

是不是因为高位是0就没有输出?懂了
页: [1]
查看完整版本: 十六进制输出问题