c语言中的位操作

c语言中的位操作,c,bit-manipulation,C,Bit Manipulation,为什么如果我循环直到I它会给出-1,这是因为第一位是符号位 当符号位为1时,数字为负数,11111111111111111111111111恰好是数字-1的32位表示形式 您可能想签出。因为现代计算机中的有符号整数表示为两个补码: 在printf语句中,您使用的是%d,它打印一个有符号整数。由于设置了符号位,因此输出正确 将格式字符串更改为%u,它将显示无符号整数值。没有更多的符号位和您要查找的值 无论如何,对于samp您应该使用无符号int,无符号int-samp=0。还记得|=操作符:sam

为什么如果我循环直到
I它会给出-1,这是因为第一位是符号位

当符号位为
1
时,数字为负数,
11111111111111111111111111
恰好是数字
-1
的32位表示形式


您可能想签出。

因为现代计算机中的有符号整数表示为两个补码:

在printf语句中,您使用的是%d,它打印一个有符号整数。由于设置了符号位,因此输出正确

将格式字符串更改为%u,它将显示无符号整数值。没有更多的符号位和您要查找的值


无论如何,对于samp

您应该使用无符号int
无符号int-samp=0
。还记得
|=
操作符:
samp |=1@embedded|guy我把它改为unsigned int samp=0,但仍然只得到-1
int samp=0;

for(i=0;i<=31;i++)
{
  samp=samp|1<<i;
}
printf("\ %d\n",samp);
-1