对字节进行XOR运算

时间:2015-01-11 04:11:10

标签: java byte xor

我试图理解XOR在字节上的工作

    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掩码它?我试图理解它是如何工作的,因为它很混乱。任何帮助都非常感谢。谢谢!

1 个答案:

答案 0 :(得分:1)

当你" upcast"整数基元类型,符号位被携带。

在:

int x = byte1 ^ byte2;

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

在你的第二个例子中,byte1 ^ byte2也给出0xffffff80,但是由于你和它的0x000000ff,你得到的是0x00000080,即128.

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