我有这行代码:
System.out.println("Flipped byte: " + ((~ Integer.parseInt(Integer.toString(byteRepresentation[8], 2), 2)) & 0xFF));
字节是有符号的这一事实阻碍了我。 byteRepresentation 是一个字节数组(java 字节原语)。当 byteRepresentation[8] 为正数 (+) 时,它可以正常工作,但是当 byteRepresentation[8] 为负数 (-) 时,它只是删除减号(使结果为正数)并减去 1。
我正在寻找一种方法,例如使 -127 变为 0,-126 变为 1 等等。
最佳答案
行为是正确的。 ~
只是翻转所有位,然后它将被解释为 twos complement
您只想将 +127 添加到您的数字中,以获得所需的行为(-127 -> 0、-126 -> 1)
示例
~(1) -> ~(00000001) -> 11111110 -> -2
System.out.println(~1); // -2
~(-1) -| 〜(11111111) -> 00000000 -> 0
System.out.println(~-1); // 0
关于java - 二元补码运算符 (~) 无法正常工作(或者我不知道如何使用它),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32199605/