有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    这是关于计算机中有符号数字的表示。它们被表示为2s-complement。这意味着:

    126   = 0111 1110
    -128  = 1000 0000
    -2    = 1111 1110
    

    2s补码中的负值是通过将绝对值作为二进制数,反转除MSB之外的所有位,向结果中添加一个,并将用作符号位的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