读书人

为什么上面的代码返回0

发布时间: 2013-03-06 16:20:31 作者: rapoo

为什么下面的代码返回0?


#include <stdio.h>
int main(void)
{
printf("%x",(1 - sizeof(int)) >> 32);
getch();
return 0;
}

按道理应该是0xffffffff才对么? c
[解决办法]
a >> b;

The behavior is undefined if the right operand is negative, or greater than or equal to the length in bits of the promoted left operand.
[解决办法]

int main(int argc, char *const argv[])
{
/* 有符号数右移填充符号位, 这里是-1 */
printf("%x\n", (int)(1 - sizeof(int)) >> 32); //对于有符号数的移位:左边空出来的全为符号位。负数的符号位为1 所以全为 1,正数的符号位为0 所以全为0。
printf("%x\n", (unsigned int)(1 - sizeof(int)) >> 32);
return 0;
}

详见《深入理解计算机系统》第2版 65页。

读书人网 >C语言

热点推荐