Java位移运算符(>>>)如何工作?

时间:2019-06-24 15:23:17

标签: java bit-shift

我通过右移2的补数20并将其转换为十进制计算出的输出与输出不匹配。为什么下面的代码会生成这样的意外输出?

class OperatorExample{  
    public static void main(String args[]){  

        System.out.println(-20>>>2);  
    } 
}

output: 1073741819

1 个答案:

答案 0 :(得分:2)

计算公式为:

以-20:

jshell> Integer.toBinaryString(-20)
$1 ==> "11111111111111111111111111101100"

将其右移2,会删除最后两个零:

jshell> Integer.toBinaryString(-20 >>> 2)
$2 ==> "111111111111111111111111111011"

并将其转换为十进制:

jshell> 0b111111111111111111111111111011
$3 ==> 1073741819