java - 二元补码运算符 (~) 无法正常工作(或者我不知道如何使用它)

标签 java bit-manipulation bit bitwise-operators

我有这行代码:

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/

相关文章:

kotlin - 如何在 Kotlin 中获取 Int 的二进制表示

c - "Marking"C 中的指针与 "attributes"

javascript - 从java调用包含 'const'的javascript?

javascript - javascript中>>>按位移位运算符的用途是什么?

java - 为什么导入 javax.swing.* 而不是 java.swing.*

java - 使用移位运算符理解 java 数组初始化

java - Java 中的 DES 实现 : Error during Key Generation Phase

python - Python 中的快速按位获取列

java - 在二维数组中创建随机生成的对象

java - 对字符串数组列表进行排序