C中的按位右移分配操作

时间:2015-08-01 19:56:00

标签: c bit-manipulation machine-code binary-operators

这个Leftshift赋值运算符的输出是-8.I不明白怎么做。请帮忙!

#include < stdio.h>

int main()
{    
    int y = -1;

    y <<= 3; 
    printf("%d", y);// prints -8;

    return 0;
}   

2 个答案:

答案 0 :(得分:2)

在32位2的补码有符号整数中,这些数字的十六进制和二进制表示为:

-1 = 0xffffffff = 11111111 11111111 11111111 11111111
-8 = 0xfffffff8 = 11111111 11111111 11111111 11111000

第二个显然是第一个左移三位,三个额外的1&#34;掉落&#34;左侧,右侧的三个位用零填充。

答案 1 :(得分:0)

有效问题。答案在于移位运算符对负值的表现不同。特别是对于leftshift作业。

您可以通过这两个链接来消除疑虑。

Bitwise operation on signed integer

Shift operator in C

希望它有所帮助。谢谢。