Java中位取反运算符~如何影响二进制、补码及有符号数表示?
- 内容介绍
- 文章标签
- 相关推荐
本文共计828个文字,预计阅读时间需要4分钟。
本文字深入解析+
在 Java 中,int 是固定宽度、有符号、采用二进制补码(Two’s Complement)表示的 32 位整数类型。理解 ~(按位取反)的行为,必须紧扣这一前提。
以 int x = 2 为例:
- 其二进制表示为(32 位,高位补零):
00000000 00000000 00000000 00000010 - 执行 ~x 后,每一位翻转:
11111111 11111111 11111111 11111101
此时,该 32 位模式本身不携带“正/负”或“有/无符号”信息;它只是一串比特。Java 虚拟机(JVM)和 Java 语言规范强制规定:所有 int 值均按有符号补码解释。因此,我们需按补码规则将其转换为十进制:
- 最高位(bit 31)为 1 → 表示负数;
- 求其绝对值:对 11111111 11111111 11111111 11111101 再取反加 1:
- 取反 → 00000000 00000000 00000000 00000010
- 加 1 → 00000000 00000000 00000000 00000011 = 3
- 故原值为 -3。
这就是 ~2 == -3 的完整推导过程。
本文共计828个文字,预计阅读时间需要4分钟。
本文字深入解析+
在 Java 中,int 是固定宽度、有符号、采用二进制补码(Two’s Complement)表示的 32 位整数类型。理解 ~(按位取反)的行为,必须紧扣这一前提。
以 int x = 2 为例:
- 其二进制表示为(32 位,高位补零):
00000000 00000000 00000000 00000010 - 执行 ~x 后,每一位翻转:
11111111 11111111 11111111 11111101
此时,该 32 位模式本身不携带“正/负”或“有/无符号”信息;它只是一串比特。Java 虚拟机(JVM)和 Java 语言规范强制规定:所有 int 值均按有符号补码解释。因此,我们需按补码规则将其转换为十进制:
- 最高位(bit 31)为 1 → 表示负数;
- 求其绝对值:对 11111111 11111111 11111111 11111101 再取反加 1:
- 取反 → 00000000 00000000 00000000 00000010
- 加 1 → 00000000 00000000 00000000 00000011 = 3
- 故原值为 -3。
这就是 ~2 == -3 的完整推导过程。

