Java位运算符直接操作整数二进制位,基于补码,仅适用于整数类型;包括&(按位与,用于清零或判断位)、|(按位或,用于置位)、^(异或,具自反性,用于交换、加密、找奇数次元素)、~(取反,等价于-n-1)、>>(带符号右移)、>>>(无符号右移)和

Java 位运算符直接操作整数的二进制位,效率高、常用于底层控制、权限管理、加密算法和性能敏感场景。理解它们的关键是:所有操作都基于补码表示,且只对 整数类型(byte/short/int/long) 有效,不适用于 float/double/boolean。
基本位运算符:& | ^ ~
&(按位与):对应位全为 1 结果才为 1。
常用于「清零特定位」或「判断标志位」:
- flag & 0x04 != 0 判断第 3 位(从 0 开始)是否置位;
- n & (n - 1) 快速判断 n 是否为 2 的幂(结果为 0 且 n ≠ 0)。
|(按位或):对应位任一为 1 结果即为 1。
典型用途是「设置标志位」:
- flags |= 0x01 把最低位置 1;
- 多个权限组合:READ | WRITE | EXECUTE。
^(按位异或):对应位相异为 1,相同为 0。
特性:自反性(a ^ a = 0)、交换律、结合律、恒等性(a ^ 0 = a)。
实用场景:
- 交换两个整数(无需临时变量):a ^= b; b ^= a; a ^= b;;
- 简单数据加密/解密(同一密钥异或两次还原);
- 找出数组中唯一出现奇数次的数(全部异或,成对抵消)。
~(按位取反):逐位翻转(0→1,1→0)。
注意:Java 中整数用补码存储,所以 ~n == -n - 1。
例如:~5(5 是 ...00000101)→ ...11111010,即 -6。
右移运算符:>> 与 >>>
>>(带符号右移):高位补符号位(正数补 0,负数补 1)。
保持数值符号,相当于除以 2 的幂并向下取整:
- 10 >> 1 → 5;
- -10 >> 1 → -5(补码下 -10 是 ...11110110,右移后高位补 1)。
>>>(无符号右移):高位一律补 0,忽略符号位。
结果总是非负,适合处理纯位模式:
- -1 >>> 1 得到 0x7FFFFFFF(即 Integer.MAX_VALUE);
- 提取字节:(n >>> 24) & 0xFF 获取最高字节。
左移运算符:
:低位补 0,高位溢出丢弃。
等价于乘以 2 的幂(不溢出前提下):
- 3 (3 × 4);
- 1 是构造第 n 位为 1 的掩码最简洁写法(如 1 = 8 = 0x08)。
注意:移位数对 32 取模(int)或 64(long),5 等价于 5 。
使用注意事项
- 运算符优先级低于算术运算符(+ -),高于关系运算符(==),使用时建议加括号避免歧义,如:(a & 0xFF) == 0x80;
- char/byte/short 在参与位运算前自动提升为 int,结果也是 int,需显式强转回原类型(如 (byte)(b & 0xFF));
- 不要对负数用无符号右移后直接当正数解读——它只是位操作,不代表数学意义;
- 避免在可读性关键处滥用位运算,除非有明确性能或语义优势。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











