java中的XOR符号字节
我是Java新手,对Java中的有符号字节感到困惑
byte a = -128;
byte b = 126;
System.out.println((byte)(a ^ b));
输出为-2。有人能解释一下我们为什么得到这个吗?-2是-128异或126的正确结果吗
另一个问题是我有一个字节b,我希望它对所有可能的字节进行异或运算,我的代码是
byte i = -128
while (i <= 127) {
byte c = (byte) b ^ i;
i++;
}
对吗
# 1 楼答案
这是关于计算机中有符号数字的表示。它们被表示为2s-complement。这意味着:
2s补码中的负值是通过将绝对值作为二进制数,反转除MSB之外的所有位,向结果中添加一个,并将用作符号位的MSB设置为1来形成的,例如: