我正在了解 >>>
的工作原理。为此,我有这个程序:
public class Main {
public static void main(String[] args)
{
short i = 130;
byte b = (byte)i;
String a = Integer.toBinaryString(256 + (int) b);
System.out.println(Integer.toBinaryString(i));
System.out.println(a.substring(a.length() -8));
System.out.println(b);
byte c = (byte) (b >>> 2);
String x = Integer.toBinaryString(256 + (int) c);
System.out.println(x.substring(x.length() -8));
System.out.println(c);
}
}
我得到了这个输出:
10000010
10000010
-126
11100000
-32
为了显示为二进制,我找到了here如何将字节显示为二进制字符串。
Operator >>>
将添加零,但我明白了:
-126
11100000
-63
代替:
-126
10100000
-32
它正在添加一个 1 而不是 0:
11100000
10100000
我做错了什么?可能我什么都不懂。
最佳答案
问题是 b >>> 2
首先将 b
提升为值为 -126 的 int,即
11111111 11111111 11111111 10000010
当你用零扩展将它右移 2 时,你会得到:
00111111 11111111 11111111 11100000
然后将其转换回字节时,它只是去掉前三个单词,得到 11100000,这就是您所看到的。
参见 section 15.19 JLS 的更多详细信息。
关于java ->>> 运算符如何在 Java 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11526912/