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? (两个补充会不会发生?)
答案 0 :(得分:0)
如上所述in JLS Sec 15.19:
n >> s
的值是带有符号扩展名的n
右移s
位位置。结果值为floor(n / 2^s)
。
所以,你正在计算-1 >> 1 == floor(-1 / 2) == floor(-0.5) = -1
。