Java 字节上的异或操作

Java 字节上的异或操作,java,byte,xor,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); 显示的输出为: Valu

我试图理解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
这里我尝试对字节1和字节2执行异或,然后用0xff屏蔽它。 字节1^字节2给我的值是-128。当我执行AND时,结果为11111111,得到128。这是否意味着,要将有符号字节转换为无符号字节,我们用0xff屏蔽它?我试图理解它是如何工作的,因为它是相当混乱的。非常感谢您的帮助。谢谢

当您“向上转换”整数基元类型时,符号位被携带

在:

事实上,两个字节都转换为整数。由于字节2是(二进制的)
10000000
,也就是0x80,它的整数值将是。。。0xFFFF80

在第二个示例中,byte1^byte2也会给出0xFFFF80,但由于您和它使用0x000000ff,所以得到的是0x00000080,即128


请注意,自Java7以来,您可以执行
字节b=(字节)0b1000_0000
;在您的情况下,您可能希望使用二进制而不是十六进制,但这是您的选择。

您是否尝试过:
intx1=((字节1^字节2)和((字节)0xff))?它也给了我-128。当我试图打印字节1^字节2时,它显示的是-128。据我所知,字节1^字节2给了我1000万。如果最左边的位是1,则表示该数字为负数。为了得到大小,我们减去1,然后将位反转:10000000-1=01111111:01111111,当解释为十进制数为128时,反转为10000000:10000000。所以我们有一个负数,大小为128,等于-128。所以在int x=字节1^字节2的情况下;如果值是0xFFFFF80,我们会考虑最后8位吗?
int x = byte1 ^ byte2;