位运算符
位运算符一览
| 运算符 | 说明 |
|---|---|
| & | 按位与 |
| | | 按位或 |
| ^ | 按位异或 |
| ~ | 按位取反 |
| << | 左移 |
| >> | 右移 |
| >>> | 无符号右移 |
按位运算
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位运算比乘除快,但只用于整数类型。处理负数时要小心,右移和无符号右移结果不同。
