Java有7种位运算符:&(按位与)、|(按位或)、^(按位异或)、~(按位取反)、<<(左移)、>>(带符号右移)、>>>(无符号右移),直接操作整数二进制位,效率远高于算术运算,广泛用于底层开发、权限控制、加密及性能敏感场景。

Java 中的位运算直接操作整数类型的二进制位,速度快、效率高,常用于底层开发、权限控制、加密算法和性能敏感场景。理解位运算的关键是掌握每个运算符对二进制位的逻辑处理方式。
基本位运算符及作用
Java 提供 6 种主要位运算符,全部作用于 int、long、short、byte 和 char(自动提升为 int)等整型数据:
-
&(按位与):两个对应位都为 1 时结果为 1,否则为 0。常用于“取指定位”或“清零某些位”。
例如:5 & 3→101 & 011 = 001→ 结果为 1 -
|(按位或):两个对应位中任意一个为 1,结果即为 1。常用于“置位”(打开某位)。
例如:4 | 2→100 | 010 = 110→ 结果为 6 -
^(按位异或):对应位不同时为 1,相同时为 0。有“自反性”(
a ^ a = 0)和“恒等性”(a ^ 0 = a),可用于交换变量、简单加密或校验。 -
~(按位取反):单目运算符,将每个位 0 变 1、1 变 0。注意:对有符号数取反后结果为负数(因补码表示),如
~5得 -6(因为5 = 000...101,取反后为111...010,即 -6 的补码)。
位移运算符:移动二进制位
位移运算不改变原值(除非显式赋值),而是生成新值。所有位移均以右侧操作数为移动位数,左侧操作数为被移对象:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
<<(左移):低位补 0,高位舍弃。每左移 1 位相当于乘以 2(不溢出前提下)。
例如:3 << 2→11左移两位 →1100= 12 -
>>(带符号右移):高位用符号位填充(正数补 0,负数补 1),保持符号不变。每右移 1 位近似除以 2(向负无穷取整)。
例如:-8 >> 1→1000(简化示例)→ 右移后仍为负,结果为 -4 - >>>(无符号右移):高位一律补 0,忽略符号位,结果总为非负数。适用于处理纯位模式(如网络字节序、图像像素)。
实用技巧与注意事项
位运算虽高效,但易出错,使用时需注意以下几点:
立即学习“Java免费学习笔记(深入)”;
- 优先级低于算术运算符(如
+、-),组合使用务必加括号。例如:a & b == 0实际等价于a & (b == 0),应写成(a & b) == 0 - 右移位数超过类型位宽(如对 int 右移 33 位)时,Java 自动对位数取模(
33 % 32 = 1),只执行 1 位右移 - 布尔类型(
boolean)不支持任何位运算;浮点类型(float、double)也不支持,必须先用Float.floatToIntBits()等转为整型 - 常用模式举例:
– 判断奇偶:n & 1(结果 1 为奇,0 为偶)
– 关闭第 k 位(从 0 开始):n & ~(1 << k)
– 打开第 k 位:n | (1 << k)
– 切换第 k 位:n ^ (1 << k)
位运算 vs 逻辑运算
别混淆 & / | / ^ 与逻辑运算符 && / || / !:
- 位运算符操作**每一位**,适用于整数;逻辑运算符操作**整个布尔表达式**,且支持短路(
&&遇 false 不计算右边) - 布尔类型可用
&和|(非短路版),但仅限于布尔值,此时行为类似逻辑运算,只是不短路 - 日常条件判断请用
&&/||;需要逐位控制或优化性能时才用位运算符

















