Skip to content

位运算符

位运算符一览

运算符说明
&按位与
|按位或
^按位异或
~按位取反
<<左移
>>右移
>>>无符号右移

按位运算

java
int a = 6;  // 110
int b = 3;  // 011

System.out.println("a & b = " + (a & b));  // 2 (010) 两者都为1才为1
System.out.println("a | b = " + (a | b));  // 7 (111) 任一为1就为1
System.out.println("a ^ b = " + (a ^ b));  // 5 (101) 不同为1,相同为0
System.out.println("~a = " + (~a));         // -7

移位运算

java
int a = 8;  // 1000

// 左移:低位补0,相当于乘以2的幂
System.out.println("a << 1 = " + (a << 1));  // 16 (10000)
System.out.println("a << 2 = " + (a << 2));  // 32

// 右移:高位补符号位(正数补0,负数补1)
int b = -8;
System.out.println("b >> 1 = " + (b >> 1));  // -4

// 无符号右移:高位始终补0
int c = -8;
System.out.println("c >>> 1 = " + (c >>> 1));  // 很大的正数

左移 n 位相当于乘以 2^n,右移 n 位相当于除以 2^n(向下取整)。

实际应用

java
// 判断奇偶(比 % 2 更快)
int num = 7;
boolean isOdd = (num & 1) == 1;

// 交换两数(不使用临时变量)
int x = 5, y = 3;
x = x ^ y;
y = x ^ y;
x = x ^ y;
System.out.println("x=" + x + ", y=" + y);  // x=3, y=5

// 乘除2的幂(高效)
int value = 16;
System.out.println("乘以4: " + (value << 2));  // 64
System.out.println("除以4: " + (value >> 2));  // 4

位运算比乘除快,但只用于整数类型。处理负数时要小心,右移和无符号右移结果不同。

基于 VitePress 构建