首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于无符号格式输出的疑问,该怎么处理

2012-02-22 
关于无符号格式输出的疑问linux环境中,c代码是:short k-1intj-1printf(k %u ,j%u,k,j)已验证 si

关于无符号格式输出的疑问
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:无符号整型,那么k和j都进行整形提升了,都提升为无符号类型。

[解决办法]
u -- unsigned int

sizeof(short) = 16

sizeof(int)= 32

你要求 按 int 格式输出
[解决办法]
printf("k = %#x\n", k);这样输出后你看看是多少,然后以无符号类型输出应该就是4294967295了。
[解决办法]
探讨

把 short k= -1 改为 unsigned short k = -1 输出就成了65535了。

[解决办法]
因为short两个字节,uint四个字节,编译器很聪明判断了出来,于是先做了隐式转换。

因为short之前是0xffff,有符号数扩宽填充符号位,所以变成uint的时候是0xffffffff
[解决办法]
VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。

热点排行