【发布时间】:2014-07-17 17:56:47
【问题描述】:
当我对一个十六进制进行左移时,我得到 -1 作为输出,代码如下:
unsigned int i,j=0;
i= (0xffffffff << (32-j));
printf("%d",i);
同样,当我将移位值更改为 32 时,输出为 0,但我从编译器收到警告为 (left shift count >= width of type)
unsigned int i,j=32;
i= (0xffffffff << (32));
printf("%d",i);
我期望两种情况下的结果相同(即 0),但我很困惑为什么在情况 #1 中显示错误的输出,而在情况 #2 中结果是正确的,但编译器会发出警告!
结果在 32 位和 64 位 x86 机器上是相同的。
有人能解释一下上面的结果吗?
【问题讨论】:
-
%d对于无符号整数是错误的。你需要%u(或%o或%x)。 -
@barakmanos- 我将 o/p 设为 -1,当我将格式说明符更改为 %x 时,我将 o/p 设为 ffffffff,其中 j=0、32- j
标签: c