java位运算符直接操作整数二进制位,支持byte、short、int、long、char类型,不适用于浮点、boolean或对象;包括&(与)、|(或)、^(异或)、~(取反)及、>>>移位运算,广泛用于权限控制、位提取、高效乘除等场景。

Java 中位运算符直接对整数的二进制位进行操作,不经过浮点转换,也不依赖高级封装,所有运算都在 bit 层面完成。它适用于 byte、short、int、long、char 这些整数类型,但不能用于 float、double、boolean 或对象。
按位逻辑运算:判断、设置、翻转和清除特定位
这类运算符处理两个操作数(或一个,如 ~)的对应二进制位:
-
&(按位与):两位都为 1 才得 1。常用于提取位(如用
value & 0b1111取低 4 位)或判断奇偶(n & 1 == 1表示奇数)。 -
|(按位或):至少一位为 1 就得 1。典型用途是组合权限标志,例如
READ | WRITE(0b0001 | 0b0010 = 0b0011)。 -
^(按位异或):相同为 0,不同为 1。可用于翻转特定位(如
flags ^ MASK),也满足a ^ a == 0和a ^ 0 == a,适合交换变量或简单加密。 -
~(按位取反):单目运算,0 变 1、1 变 0。注意结果会受符号位影响,例如
~5得到的是-6(因 Java 使用补码表示负数)。
移位运算:高效实现乘除与位布局调整
移位本质是把整个二进制序列向左或向右“滑动”,空出的位置按规则填充:
- :高位丢弃,低位补 0。每左移 1 位等价于乘以 2,例如
7 → <code>0111 → 11100= 28。 -
>>(有符号右移):低位丢弃,高位补原符号位(正数补 0,负数补 1)。适合带符号整数的整除,如
-8 >> 1= -4。 - >>>(无符号右移):低位丢弃,高位一律补 0。负数会被转成很大的正数,适合处理纯位数据(如解析网络字节流、位图)。
实际编码中要注意的关键点
位运算虽快,但容易出错,需留意以下细节:
- Java 中整数默认是 32 位 int(
long是 64 位),运算时会自动扩展到对应长度,不要假设只有 8 位。 - 混合使用位运算与算术运算时,注意优先级:&、|、^ 低于 ==,高于 &&,建议加括号明确意图,比如
(flags & READ) != 0。 - 负数参与位运算时,始终以补码形式参与,例如
-1的 int 表示是 32 个 1(0xffffffff),这会影响&和移位结果。 - 避免对
char或byte直接做位运算后赋值——它们会先提升为int,若想保留低 8 位,记得用掩码,如(b & 0xFF)。
一个典型权限控制示例
用位运算管理用户权限既省内存又高效:
- 定义常量:
public static final int READ = 1 (=1)、<code>WRITE = 1 (=2)、<code>EXECUTE = 1 (=4) - 授予权限:
int userPerms = READ | EXECUTE;(=5,即0b101) - 检查权限:
if ((userPerms & WRITE) != 0)→ 判断是否含写权限 - 撤销权限:
userPerms = userPerms & ~WRITE;(用取反+与实现“清除位”)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











