带有负字节的java中的XOR

时间:2015-09-07 23:44:55

标签: java binary xor twos-complement

byte b = -0b0101^-0b0100;
System.out.println("Outputs "+b);
//Outputs 7

为什么在我期待1(0b111)时输出7(0b001)?

2 个答案:

答案 0 :(得分:3)

负数根据" 2的补码"计算。算术。

-0b0101 = NOT(0000 0101) + 1 = 1111 1010 + 1 = 1111 1011
-0b0100 = NOT(0000 0100) + 1 = 1111 1011 + 1 = 1111 1100

如果你对这些感到异议,你会得到:

0000 0111 = 7

答案 1 :(得分:0)

为了呈现二进制的负数,我们使用“Two's complement”

这是你在java中获得负二进制数的方法,请查看以下链接: How are integers internally represented at a bit level in Java?

然后你得到: -5的二进制是11111011 二进制-4是11111100                 --------                 00000111 =这是7.这就是输出为7的原因,希望它有所帮助。