为什么表达式-3 >> 1会产生-2?

时间:2019-09-05 07:28:37

标签: java

我正在Java中运行此(-3 >> 1)并获得答案-2,但根据我的说法,它应该是-1,因为我这样想-3/2。请帮助我理解这一点。

int x = -3 >> 1;
System.out.println(x + " " + (-3 >> 1));

2 个答案:

答案 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