位运算直接操作二进制位,在处理底层数据、加密算法、图像处理等领域具有高效性能和效率。本文将深入探讨Java中的位运算。
本文目录
- 一、位运算简介
- 1. 与运算
- 2. 或运算
- 异或运算
- 取反运算
- 左移运算
- 右移运算
- 无符号右移运算
- 二、位运算的实际应用
- 1. 权限管理
- 2. 交换两个变量的值
一、位运算简介
在Java中,位运算主要有以下几种:与(&
)、或(|
)、异或(^
)、取反(~
)、左移(<<
)、右移(>>
)和无符号右移(>>>
)。
1. 与运算
与运算的规则是:只有当两个对应位都为 1 时,结果位才为 1,否则为 0。
public class BitwiseAnd {public static void main(String[] args) {int a = 5; // 0101int b = 3; // 0011int result = a & b; // 0001System.out.println("5 & 3 = " + result);}
}
2. 或运算
或运算的规则是:只要两个对应位中有一个为 1,结果位就为 1,只有当两个位都为 0 时,结果位才为 0。
public class BitwiseOr {public static void main(String[] args) {int a = 5; // 0101int b = 3; // 0011int result = a | b; // 0111System.out.println("5 | 3 = " + result);}
}
异或运算
异或运算的规则是:当两个对应位不同时,结果位为 1,相同时结果位为 0。
public class BitwiseXor {public static void main(String[] args) {int a = 5; // 0101int b = 3; // 0011int result = a ^ b; // 0110System.out.println("5 ^ 3 = " + result);}
}
取反运算
取反运算会将每一位取反,即 0 变为 1,1 变为 0。
public class BitwiseNot {public static void main(String[] args) {int a = 5; // 0101int result = ~a; // 1010System.out.println("~5 = " + result);}
}
取反运算得到的结果是
补码
表示
左移运算
左移运算会将二进制位向左移动指定的位数,右边空出的位用 0 填充。
public class LeftShift {public static void main(String[] args) {int a = 5; // 0101int result = a << 2; // 010100System.out.println("5 << 2 = " + result);}
}
右移运算
右移运算会将二进制位向右移动指定的位数,左边空出的位用符号位填充(正数用 0 填充,负数用 1 填充)。
public class RightShift {public static void main(String[] args) {int a = 5; // 0101int result = a >> 1; // 0010System.out.println("5 >> 1 = " + result);}
}
无符号右移运算
无符号右移运算会将二进制位向右移动指定的位数,左边空出的位用 0 填充,不考虑符号位。
public class UnsignedRightShift {public static void main(String[] args) {int a = -5; // 11111111111111111111111111111011int result = a >>> 1; // 01111111111111111111111111111101System.out.println("-5 >>> 1 = " + result);}
}
二、位运算的实际应用
1. 权限管理
位运算可以用于权限管理,通过不同的位来表示不同的权限。
public class PermissionManager {public static final int READ_PERMISSION = 1; // 0001public static final int WRITE_PERMISSION = 2; // 0010public static final int EXECUTE_PERMISSION = 4; // 0100private int permissions;public PermissionManager() {this.permissions = 0;}// 添加权限public void addPermission(int permission) {permissions = permissions | permission;}// 检查权限public boolean hasPermission(int permission) {return (permissions & permission) == permission;}public static void main(String[] args) {PermissionManager manager = new PermissionManager();manager.addPermission(READ_PERMISSION);manager.addPermission(WRITE_PERMISSION);System.out.println( manager.hasPermission(READ_PERMISSION));System.out.println(manager.hasPermission(EXECUTE_PERMISSION));}
}
2. 交换两个变量的值
不使用临时变量,通过异或运算可以交换两个变量的值:
public class SwapVariables {public static void main(String[] args) {int a = 5;int b = 3;System.out.println(" a = " + a + ", b = " + b);a = a ^ b;b = a ^ b;a = a ^ b;System.out.println(" a = " + a + ", b = " + b);}
}
← 上一篇 Java进阶——常用类及常用方法详解 | 记得点赞、关注、收藏哦! | 下一篇 Java进阶——数组超详细整理 → |