这个Leftshift赋值运算符的输出是-8.I不明白怎么做。请帮忙!
#include < stdio.h>
int main()
{
int y = -1;
y <<= 3;
printf("%d", y);// prints -8;
return 0;
}
答案 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
和
希望它有所帮助。谢谢。