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