Java 移位运算符 (>>>) 是如何工作的?
How does Java bit shift operator (>>>) work?
我通过右移20的2的补码然后将结果转换为十进制计算的输出与输出不匹配。为什么下面的代码会产生这样意外的输出?
class OperatorExample{
public static void main(String args[]){
System.out.println(-20>>>2);
}
}
output: 1073741819
计算是:
取-20:
jshell> Integer.toBinaryString(-20)
==> "11111111111111111111111111101100"
右移 2,删除最后两个零:
jshell> Integer.toBinaryString(-20 >>> 2)
==> "111111111111111111111111111011"
并将其转换为十进制:
jshell> 0b111111111111111111111111111011
==> 1073741819
我通过右移20的2的补码然后将结果转换为十进制计算的输出与输出不匹配。为什么下面的代码会产生这样意外的输出?
class OperatorExample{
public static void main(String args[]){
System.out.println(-20>>>2);
}
}
output: 1073741819
计算是:
取-20:
jshell> Integer.toBinaryString(-20)
==> "11111111111111111111111111101100"
右移 2,删除最后两个零:
jshell> Integer.toBinaryString(-20 >>> 2)
==> "111111111111111111111111111011"
并将其转换为十进制:
jshell> 0b111111111111111111111111111011
==> 1073741819