~ 是按位取反运算符,对 int 的 32 位补码(含符号位)逐位翻转,结果恒等于 -(x + 1),如 ~5 == -6、~-3 == 2、~0 == -1,其本质是补码体系下的数学恒等式 ~x == -x - 1。

在 Java 中,~ 是按位取反运算符,它对整数的**每一位二进制位(包括符号位)进行 0→1、1→0 的翻转**。要正确理解其结果,必须结合 Java 整数的补码表示法——尤其是符号位如何参与运算并影响最终值。
补码是 Java 整数的底层存储形式
Java 中的 int 是 32 位有符号整数,采用补码(Two's Complement)表示:
- 正数补码 = 原码(如
5的二进制为0000...0101) - 负数补码 = 对应正数原码取反后加 1(如
-5的补码是1111...1011) - 最高位(第 31 位)是符号位:0 表示正数,1 表示负数
~ 运算直接作用于补码的所有 32 位
它不区分符号位或数值位,一律翻转。例如:
对 5 取反:
-
5的补码(32 位):00000000 00000000 00000000 00000101 - 按位取反后:
11111111 11111111 11111111 11111010 - 该结果是补码形式,需还原为十进制:它是
-6(因为1111...1010是-6的补码)
结论:~5 == -6。同理:~-3 == 2,~0 == -1。
核心规律:~x 等价于 -(x + 1)
这是补码体系下按位取反的数学恒等式,适用于所有整数:
-
~x == -x - 1(即-(x + 1)) - 推导依据:补码中,
-x的定义是~x + 1;移项即得~x == -x - 1 - 验证:
~10 → -11,~-8 → 7,均成立
注意:不要混淆“取反”与“变号”
~ 不是负号 -,也不等价于乘以 -1:
-
-x是求相反数(代数取负),涉及补码转换逻辑 -
~x是纯位级翻转,结果恒比-x小 1 - 例如:
x = 0→-x == 0,但~x == -1
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











