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

为什么上面的代码返回0

2013-03-06 
为什么下面的代码返回0?#include stdio.hint main(void) {printf(%x,(1 - sizeof(int)) 32)getch(

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

热点排行