Java位运算符专用于byte、short、int、long、char等整数类型,基于补码运算,不支持boolean/float/double;包括&(与)、|(或)、^(异或)、~(取反)、<<(左移)、>>(有符号右移)、>>>(无符号右移)共7种,常用于权限控制、奇偶判断、位操作优化等场景。

Java 中位运算符专用于整数基本类型:byte、short、int、long 和 char。它们直接操作数值的二进制补码表示,不能用于 boolean、float 或 double。
位运算符只对整数有效,且所有运算都在补码层面进行。比如 ~5 不是 ~0101 = 1010(看似得10),而是对 5 的32位补码 0000...0101 全取反,得到 1111...1010,即 -6。
常见位运算符及典型用法
-
&(按位与)- 同为 1 才得 1;常用于提取特定位或判断标志是否开启
- 示例:
(flags & READ) != 0判断是否具有读权限 - 提取低4位:
value & 0x0F
-
|(按位或)立即学习“Java免费学习笔记(深入)”;
- 有 1 就得 1;常用于设置标志位
- 示例:
flags |= WRITE开启写权限 - 组合多个权限:
READ | WRITE | EXEC
-
^(按位异或)- 相同为 0,不同为 1;具自反性(
a ^ b ^ b == a) - 示例:
flags ^= DEBUG翻转调试开关 - 无临时变量交换:
a ^= b; b ^= a; a ^= b;
- 相同为 0,不同为 1;具自反性(
-
~(按位取反)- 每一位 0↔1;结果恒为负数(除非是
char且高位被截断) - 配合
&清除某位:flags &= ~WRITE关闭写权限
- 每一位 0↔1;结果恒为负数(除非是
-
<<(左移)
Java Maven Common下载Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 左移 n 位 ≈ 乘以 $2^n$(不溢出前提下)
- 示例:
n << 3等价于n * 8
-
>>(有符号右移)- 右移 n 位 ≈ 除以 $2^n$ 并向下取整,高位补符号位
- 示例:
-8 >> 1得-4
-
>>>(无符号右移)- 右移 n 位,高位一律补 0;适用于需逻辑右移的场景
- 示例:
-1 >>> 1得2147483647(0x7FFFFFFF)
处理基本类型时的关键细节
-
byte、short、char在参与位运算前会自动提升为int- 所以
byte b = (byte)5; int r = b & 0xFF;中的b & 0xFF实际是(int)b & 0xFF,结果仍是int - 若需保持
byte类型,需显式强制转换:(byte)(b & 0xFF)
- 所以
-
位移位数对类型长度取模
-
int是 32 位,所以n << 35等价于n << (35 % 32)即n << 3 -
long是 64 位,对应取模 64
-
-
运算优先级低于比较和逻辑运算符
- 错误写法:
if (flags & READ != 0)→ 实际是flags & (READ != 0) - 正确写法:
if ((flags & READ) != 0)
- 错误写法:
-
boolean类型不支持位运算-
&和|在boolean表达式中是逻辑运算符(非短路版),不是位运算
-
实用小技巧速查
- 判断奇偶:
n & 1 == 0(比% 2更快,且对负数行为一致) - 获取第 k 位(从 0 开始):
(n >> k) & 1 - 设置第 k 位:
n | (1 << k) - 清除第 k 位:
n & ~(1 << k) - 翻转第 k 位:
n ^ (1 << k) - 交换两个整数:
a ^= b; b ^= a; a ^= b;(仅限相同变量,注意可读性)
不复杂但容易忽略细节。

















