Java中的右移算子功能

时间:2017-07-03 07:06:18

标签: java bitwise-operators bit-shift

int z = -1; int m = z>>1; System.out.println("the values is " +m);

输出是 the values is -1

但我怀疑它是如何在内部发生的,可以解释一下吗?一步一步的程序。

int z = 2; int m = z>> 1;

二进制中的z值

00000000 00000000 00000000 00000010

移动值后,二进制的m值将为

00000000 00000000 00000000 00000001,当我打印m值时,它将为1,但我的问题是,如果我为z变量使用负值并且当我赋值z值时会发生什么-1为什么输出变量本身为-1? (两个补充会不会发生?)

1 个答案:

答案 0 :(得分:0)

如上所述in JLS Sec 15.19

  

n >> s的值是带有符号扩展名的n右移s位位置。结果值为floor(n / 2^s)

所以,你正在计算-1 >> 1 == floor(-1 / 2) == floor(-0.5) = -1