我试图了解字节的异或的工作
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
;在您的情况下,您可能想使用二进制而不是十六进制,但这是您的选择。