我刚刚了解了逻辑右移。为什么我的java计算不正确? 示例:
public class Operators {
public static void main(String[] args) {
byte z = -16;
System.out.println((z >>> 2));
}
}
为什么Java输出:1073741820
-16 = 1111 0000
-16 >>> 2 = 0011 1100 = 60
感谢您的帮助:)
最佳答案
无符号右移运算符>>>
不使用符号位来填充尾随位置。它始终用 0
填充尾随位置。
public class Main {
public static void main(String[] args) {
String s = "00000000000000000000000000000000";
byte z = -16;
System.out.println("z in decimal: " + z + ", binary: " + s.substring(Integer.toBinaryString(z).length())
+ Integer.toBinaryString(z));
System.out.println("z >>> 1 in decimal: " + (z >>> 1) + ", binary: "
+ s.substring(Integer.toBinaryString(z >>> 1).length()) + Integer.toBinaryString(z >>> 1));
System.out.println("z >>> 2 in decimal: " + (z >>> 2) + ", binary: "
+ s.substring(Integer.toBinaryString(z >>> 2).length()) + Integer.toBinaryString(z >>> 2));
}
}
输出:
z in decimal: -16, binary: 11111111111111111111111111110000
z >>> 1 in decimal: 2147483640, binary: 01111111111111111111111111111000
z >>> 2 in decimal: 1073741820, binary: 00111111111111111111111111111100
关于java - 为什么Java不能正确计算逻辑右移?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60423284/