java 中的异或符号字节
XOR signed bytes in java
我是 Java 的新手,我对 Java 中的带符号字节感到很困惑。
byte a = -128;
byte b = 126;
System.out.println((byte)(a ^ b));
输出为-2。有人可以解释为什么我们得到这个吗? -2 是 -128 XOR 126 的正确结果吗?
另一个问题是我有一个字节b,我希望它对所有可能的字节进行异或,我的代码是
byte i = -128
while (i <= 127) {
byte c = (byte) b ^ i;
i++;
}
是否正确?
二进制数学非常简单...
-128在8位中是10000000(别忘了是2补码)
126 在 8 位中是 01111110
xor 那些然后你得到 1111 1110:这是 8 位 2 补码中的 -2
这是关于计算机中有符号数的表示。它们表示为 2s-complement。这意味着:
126 = 0111 1110
-128 = 1000 0000
-2 = 1111 1110
2s补码中的负值是将绝对值作为二进制数,将除MSB外的所有位取反,结果加1,并将用作符号位的MSB设置为1,例如。 :
-3:
0000 0011 absolute value (3)
0111 1100 invert all bits except MSB
0111 1101 add 1
1111 1101 set MSB to 1
我是 Java 的新手,我对 Java 中的带符号字节感到很困惑。
byte a = -128;
byte b = 126;
System.out.println((byte)(a ^ b));
输出为-2。有人可以解释为什么我们得到这个吗? -2 是 -128 XOR 126 的正确结果吗?
另一个问题是我有一个字节b,我希望它对所有可能的字节进行异或,我的代码是
byte i = -128
while (i <= 127) {
byte c = (byte) b ^ i;
i++;
}
是否正确?
二进制数学非常简单...
-128在8位中是10000000(别忘了是2补码) 126 在 8 位中是 01111110
xor 那些然后你得到 1111 1110:这是 8 位 2 补码中的 -2
这是关于计算机中有符号数的表示。它们表示为 2s-complement。这意味着:
126 = 0111 1110
-128 = 1000 0000
-2 = 1111 1110
2s补码中的负值是将绝对值作为二进制数,将除MSB外的所有位取反,结果加1,并将用作符号位的MSB设置为1,例如。 :
-3:
0000 0011 absolute value (3)
0111 1100 invert all bits except MSB
0111 1101 add 1
1111 1101 set MSB to 1