十六进制输出问题
#include <stdio.h>int main()
{
short a;
a=0xf001;
printf("%x\n",a);
return 0;
}
为什么输出的是fffff001?
根据反汇编结果得知:
%x/%X 所需要的数据长度是4字节,但是你的short是2字节,所以在a传递的时候,编译器做了一个扩展
使用movsx指令, 就是低字的最高位来填充高字,组成一个双字(4字节).
例如,0xF001 - 最高位为1 (化作2进制,一目了然)
然后高字扩展的时候就为0xFFFF了,所以结果就是0xFFFFF001
有啥问题,再讨论。 理解了,谢谢 可是如果是正数的话,输出却只有两个字节? 是不是因为高位是0就没有输出?懂了
页:
[1]