【问题标题】:XOR in java with negative bytesjava中带有负字节的XOR
【发布时间】:2015-09-07 23:44:54
【问题描述】:
byte b = -0b0101^-0b0100;
System.out.println("Outputs "+b);
//Outputs 7

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

【问题讨论】:

    标签: java binary xor twos-complement


    【解决方案1】:

    负数根据“补码”算法计算。

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

    如果你对这些进行异或,你会得到:

    0000 0111 = 7
    

    【讨论】:

      【解决方案2】:

      为了以二进制表示负数,我们使用“Two's Complement”

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-17
        • 2018-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多