如何>&燃气轮机&燃气轮机;运算符在Java中工作

如何>&燃气轮机&燃气轮机;运算符在Java中工作,java,binary,bitwise-operators,bit-shift,Java,Binary,Bitwise Operators,Bit Shift,我了解>>的工作原理。为此,我有一个程序: 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

我了解
>>
的工作原理。为此,我有一个程序:

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
为了显示为二进制,我发现了如何将字节显示为二进制字符串

运算符
>>
将添加零,但我得到以下结果:

-126
11100000
-63
而不是:

-126
10100000
-32
它正在添加1而不是0:

11100000
10100000

我做错了什么?也许我什么都不懂。

问题是
b>>2
首先将
b
提升为值为-126的整数,即

11111111 11111111 11111111 10000010
当您将其右移2且零扩展时,您将得到:

00111111 11111111 11111111 11100000
当它转换回一个字节时,只需删掉前三个字,即11100000,这就是你看到的


有关位移位的更多详细信息,请参阅JLS的第页。

@DanielDiPaolo错误。我也觉得这个问题已经得到了回答before@DanielDiPaolo
>
是一个零填充右移。我正要从你在这篇关于C#等价物的帖子上链接你的答案谢谢你的答案。你知道是否有另一个字节可以表示为二进制字符串吗?非常感谢。@VansFannel:我现在还不知道有哪一个,不过我可能会使用:
Integer.tobinarysting(b&0xff)