为什么下面的代码返回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页。