java 中的 XOR 与负字节
XOR in java with negative bytes
byte b = -0b0101^-0b0100;
System.out.println("Outputs "+b);
//Outputs 7
为什么我期望输出 1 (0b001
) 而输出 7 (0b111
)?
负数根据"two's complement"算法计算。
-0b0101 = NOT(0000 0101) + 1 = 1111 1010 + 1 = 1111 1011
-0b0100 = NOT(0000 0100) + 1 = 1111 1011 + 1 = 1111 1100
如果你对这些进行 XOR,你会得到:
0000 0111 = 7
为了用二进制表示负数,我们使用 "Two's complement"
这是在 java 中获得负二进制数的方法,请检查此 link:
How are integers internally represented at a bit level in Java?
然后你得到:
-5 二进制是 11111011
-4 二进制是 11111100
----------
00000111 = 这是 7。这就是输出为 7 的原因,希望对您有所帮助。
byte b = -0b0101^-0b0100;
System.out.println("Outputs "+b);
//Outputs 7
为什么我期望输出 1 (0b001
) 而输出 7 (0b111
)?
负数根据"two's complement"算法计算。
-0b0101 = NOT(0000 0101) + 1 = 1111 1010 + 1 = 1111 1011
-0b0100 = NOT(0000 0100) + 1 = 1111 1011 + 1 = 1111 1100
如果你对这些进行 XOR,你会得到:
0000 0111 = 7
为了用二进制表示负数,我们使用 "Two's complement"
这是在 java 中获得负二进制数的方法,请检查此 link: How are integers internally represented at a bit level in Java?
然后你得到: -5 二进制是 11111011 -4 二进制是 11111100 ---------- 00000111 = 这是 7。这就是输出为 7 的原因,希望对您有所帮助。