我正在Java中运行此(-3 >> 1)
并获得答案-2
,但根据我的说法,它应该是-1
,因为我这样想-3/2
。请帮助我理解这一点。
int x = -3 >> 1;
System.out.println(x + " " + (-3 >> 1));
答案 0 :(得分:5)
答案来自Java中-3的二进制表示形式,
11111111111111111111111111111101
将这些位右移一位会得到
11111111111111111111111111111110
哪个是-2。
答案 1 :(得分:0)
将取数保存为2的补数以进行算术运算
以2的补数表示-3
+3-> 0011
补码-> 1100
添加1-> 0001
-3-> 1101
右移运算后的值将为1110,因为对负数的右移运算将1添加到最左边的位。
链接Why does right shifting negative numbers in C bring 1 on the left-most bits?
以2的补数表示-2
+2-> 0010
补码-> 1101
添加1-> 0001
-2 =-> 1110