这个Leftshift赋值运算符的输出是-8。我不知道如何,请帮忙!

#include < stdio.h>

int main()
{
    int y = -1;

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

    return 0;
}

最佳答案

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

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


第二个显然是第一个左移三位,左边的三个额外的“ 1”“掉落”在左侧,右边的三位用零填充。

关于c - C中的按位右移赋值运算符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31765626/

10-11 23:02