Van*_*nel 3 java binary bit-shift bitwise-operators
我理解它是如何>>>运作的.要做到这一点,我有这个程序:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
我得到这个输出:
10000010
10000010
-126
11100000
-32
Run Code Online (Sandbox Code Playgroud)
为了显示为二进制,我在这里找到了如何将字节显示为二进制字符串.
运算符>>>将添加零,但我得到:
-126
11100000
-63
Run Code Online (Sandbox Code Playgroud)
代替:
-126
10100000
-32
Run Code Online (Sandbox Code Playgroud)
它添加1而不是0:
11100000
10100000
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?也许我什么都不懂.
问题是b >>> 2首先b将值提升为具有-126的int,即
11111111 11111111 11111111 10000010
Run Code Online (Sandbox Code Playgroud)
当你用零扩展将右移2时,你会得到:
00111111 11111111 11111111 11100000
Run Code Online (Sandbox Code Playgroud)
然后当它转换回一个字节时,它只会丢掉前三个单词,给出11100000,这就是你所看到的.
有关位移的更多详细信息,请参见JLS的第15.19节.