-1

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

#include < stdio.h>

int main()
{    
    int y = -1;

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

    return 0;
}   
4

2 回答 2

2

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

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

其中第二个显然是第一个左移了三位,三个额外的 1 “从”左侧“脱落”,右侧的三位被零填充。

于 2015-08-01T20:42:09.627 回答
0

有效的问题。答案在于移位运算符对于负值的行为不同。特别是对于左移分配。

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

有符号整数的按位运算

C中的移位运算符

希望它有帮助。谢谢。

于 2015-08-01T21:13:23.433 回答