int samp=0;
for(i=0;i<=31;i++)
{
samp=samp|1<<i;
}
printf("\ %d\n",samp);
输出:
-1
如果循环到
i<=31
(将所有32位设置为1),为什么会给出-1?当我只循环
i<31
时,它给出2147483647。为什么会这样? 最佳答案
在printf语句中,您使用的是%d,它打印有符号整数。由于设置了符号位,因此输出正确。
将格式字符串更改为%u,它将显示无符号整数值。不再有符号位和您要寻找的值。
无论如何,您应该为samp使用无符号int。