关于无符号格式输出的疑问
linux环境中,c代码是:
short k=-1;
int j=-1;
printf("k = %u ,j=%u",k,j);
已验证 sizeof(k) =2 ,说明 short 是16位
但为什么 k 和 j 输出都是 4294967295,k 为什么不是 65535 ?
[解决办法]
函数传值时貌似提升了
[解决办法]
嗯,short首先被提升为int
[解决办法]
%u 十进制无符号整数(int)
[解决办法]
输出前被转换了.
[解决办法]
你的输出格式是%u:无符号整型,那么k和j都进行整形提升了,都提升为无符号类型。
[解决办法]
[解决办法]
u -- unsigned int
sizeof(short) = 16
sizeof(int)= 32
你要求 按 int 格式输出
[解决办法]
printf("k = %#x\n", k);这样输出后你看看是多少,然后以无符号类型输出应该就是4294967295了。
[解决办法]
[解决办法]
因为short两个字节,uint四个字节,编译器很聪明判断了出来,于是先做了隐式转换。
因为short之前是0xffff,有符号数扩宽填充符号位,所以变成uint的时候是0xffffffff
[解决办法]
VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。