我试图了解字节的异或的工作

    byte byte1 = (byte)0x00;
    byte byte2 = (byte)0x80;
    int x = ((byte1^byte2));
    System.out.println("Value of X is "+x);
    int x1 = ((byte1^byte2)&0xff);
    System.out.println("Value of X1 is "+x1);


显示的输出为:

   Value of X is -128
   Value of X1 is 128


在这里,我尝试对byte1和byte2执行XOR,然后使用0xff对其进行屏蔽。
byte1 ^ byte2给我的值是-128。当我对结果和11111111执行AND运算时,我得到128。这是否意味着要将有符号字节转换为无符号字节,我们用0xff对其进行掩码?我正试图了解它是如何工作的,这非常令人困惑。非常感谢您的帮助。谢谢!!

最佳答案

当您“上传”整数基本类型时,将携带符号位。

在:

int x = byte1 ^ byte2;


实际上,两个字节都转换为整数。并且由于byte2是(二进制)1000 0000,又名0x80,因此其整数值为... 0xffffff80。

在您的第二个示例中,byte1 ^ byte2也给出了0xffffff80,但是由于您以及它的值为0x000000ff,因此您的确得到了0x00000080,即128。

注意,从Java 7开始,您可以执行byte b = (byte) 0b1000_0000;在您的情况下,您可能想使用二进制而不是十六进制,但这是您的选择。

08-18 04:39