????????位運算直接操作二進制位,在處理底層數據、加密算法、圖像處理等領域具有高效性能和效率。本文將深入探討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進階——數組超詳細整理 → |