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。

08-26 22:19