Java 位运算
- 计算机对二进制数据进行的运算(比如加、减、乘、除)被称为位运算,即对二进制数的每一位进行操作的运算
按位与 &
- and,对应位都为 1 时才为 1,否则为 0
- 应用:判断奇偶性,比如 (a & 1) == 1 为奇数,(a & 1) == 0 为偶数
int a = 5;
int b = 3;
int result = a & b;
System.out.println(result);
按位或 |
int a = 5;
int b = 3;
int result = a | b;
System.out.println(result);
按位异或 ^
- xor,按位异或,对应位不同时,结果才为 1,否则为 0
- 应用:快速交换变量,比如 a^=b; b^=a; a^=b;
int a = 5;
int b = 3;
int result = a ^ b;
System.out.println(result);
按位取反 ~
- inv,将每一位取反(0 变 1,1 变 0),取反运算不改变变量本身的值,仅返回临时结果
int a = 5;
int result = ~a;
System.out.println(result);
左移 <<
- shl,二进制位向左移动,右侧补 0
- 相当于乘以 2^n(左移、右移操作比乘除快)
int a = 5;
int result = a << 1;
System.out.println(result);
右移 >>
- shr,二进制位向右移动,左侧补符号位(正数补 0,负数补 1)
- 相当于除以 2^n(并向下取整)
int a = 8;
int result = a >> 1;
System.out.println(result);
无符号右移 >>>
- ushr,二进制位向右移动,左侧补 0(忽略符号位)
int a = -5;
int result = a >>> 1;
System.out.println(result);
权限管理
public class Permission {
public static final int READ = 1 << 0;
public static final int WRITE = 1 << 1;
public static final int EXECUTE = 1 << 2;
public static final int DELETE = 1 << 3;
private int permissions;
public void addPermission(int permission) {
permissions |= permission;
}
public void removePermission(int permission) {
permissions &= ~permission;
}
public boolean hasPermission(int permission) {
return (permissions & permission) == permission;
}
public int getPermissions() {
return permissions;
}
public static void main(String[] args) {
Permission permission = new Permission();
System.out.println(permission.getPermissions());
permission.addPermission(READ | WRITE);
System.out.println(permission.getPermissions());
System.out.println(permission.hasPermission(READ));
System.out.println(permission.hasPermission(WRITE));
System.out.println(permission.hasPermission(EXECUTE));
System.out.println(permission.hasPermission(DELETE));
permission.removePermission(WRITE);
System.out.println(permission.getPermissions());
permission.addPermission(EXECUTE | DELETE);
System.out.println(permission.getPermissions());
System.out.println(permission.hasPermission(READ));
System.out.println(permission.hasPermission(WRITE));
System.out.println(permission.hasPermission(EXECUTE));
System.out.println(permission.hasPermission(DELETE));
}
}
数据简单压缩(加密)
int data = 31415926;
int key = 666888;
int encrypted = data ^ key;
System.out.println(encrypted);
int decrypted = encrypted ^ key;
System.out.println(decrypted);