通常,程式設計師處理 int、float、double、String 等資料類型的變數或 Array、List、ArrayList 等集合。在某些情況下,程式設計師需要更深入地了解位元組和位元層級的數據,以提取和操作資料。 Java 和 C# 等語言可讓您在位元層級操作數據,這表示您可以存取位元組中的特定位元。在本主題中,我們將學習 Java 中的位元操作。
在進行資料壓縮和資料加密時,通常需要 Java 中的位元操作,程式設計師需要在位元層級提取資料以對原始資料進行編碼、解碼或壓縮。我們將在本文後面看到位元操作的許多其他應用。
開始您的免費軟體開發課程
網頁開發、程式語言、軟體測試及其他
Java 支援 3 位元移位和 4 個位元運算子來執行位元層級的運算。這些運算子可用於整數(int、short、long 和 byte)以執行位元層級的操作。
以下是運算子:
Operator | Description |
& | Bitwise AND |
| | Bitwise OR |
~ | Bitwise Complement |
<< | Left Shift |
>> | Right Shift |
^ | Bitwise XOR |
>>> | Unsigned Right Shift |
讓我們更詳細地了解運算子。
這是一個二元運算符,需要2 個操作數,用符號「|」表示」。位元運算子比較兩個運算元的對應位。如果運算元任意一位為1,則輸出為1;如果沒有,則為0。
範例
15 = 00001111(二進位)
27 = 00011011(二進位)
15 和 27 的位元或運算
00001111
| 00011011
___
00011111 = 31(十進位)
Java 程式
public class BitwiseOR { public static void main(String[] args) { int operand1 = 15, operand2 = 27, output = operand1 | operand2; System.out.println(output); } }
輸出:
2.位元與
範例
15 = 00001111(二進位)
27 = 00011011(二進位)
15 與 27 的位元與運算
00001111
| 00011011
___
00001011 = 11(十進位)
Java 程式
public class BitwiseAND { public static void main(String[] args) { int operand1 = 15, operand2 = 27, output = operand1 & operand2; System.out.println(output); } }
輸出:
3.按位補
範例
15 = 00001111(二進位)
15的位元補運算
~ 00001111
___
11110000 = 240(十進位)
Java 程式
public class BitwiseComplement { public static void main(String[] args) { int operand= 15, output; output= ~operand; System.out.println(output); } }
輸出:
注意:當您執行 Java 程式時,您將得到 -16 作為輸出,而不是 240,因為編譯器顯示該數字的 2 補碼,即二進位數的負數。 任何數的 2 補碼等價於 -(n+1),其中 n 是要計算 2 補碼的數。在我們的例子中,操作數 15 的 2 補碼是 -16,這是程式的輸出。
位元異或運算子相當於(位元或 + 位元補)
範例
15 = 00001111(二進位)
27 = 00011011(二進位)
15 和 27 的位元異或運算
00001111
^ 00011011
___
00010100 = 20(十進位)
Java 程式
public class BitwiseXor { public static void main(String[] args) { int operand1= 15, operand2 = 27, output; output = operand1 ^ operand2; System.out.println(output); } }
輸出:
5.帶符號左移
範例
123(二進位:01111011)
第123章1 的計算結果為 246(二進位:011110110)
第123章2 的計算結果為 492(二進位:0111101100)
第123章3 的計算結果為 984(二進位:01111011000)
Java 程式
public class LeftShiftOperator { public static void main(String[] args) { int operand = 123; System.out.println(operand << 1); System.out.println(operand << 2); System.out.println(operand << 3); } }
輸出:
6.帶符號右移
範例
123(二進位:01111011)
第123話1 的計算結果為 61(二進位:00111101)
第123話2 的計算結果為 30(二進位:00011110)
第123話3 的計算結果為 15(二進位:00001111)
Java 程式
public class RightShiftOperator { public static void main(String[] args) { int operand = 123; System.out.println(operand >> 1); System.out.println(operand >> 2); System.out.println(operand >> 3); } }
輸出:
7.無符號右移
Java 程式
public class UnSignedRightShiftOperator { public static void main(String[] args) { int operand = 123; System.out.println(operand >>> 1); System.out.println(operand >>> 2); System.out.println(operand >>> 3); } }
輸出:
現在我們已經到了文章的結尾,讓我們總結一下我們在本文中討論的要點。我們已經了解了什麼是位元操作及其不同的用例。我們也學習了不同類型的位元運算子(位元與、位元或、位元補和位元異或)和位移運算子(有符號左移運算子、有符號右移運算子和無符號右移運算子)以及範例和樣本Java 程式解釋各個運算子。
以上是Java 中的位元操作的詳細內容。更多資訊請關注PHP中文網其他相關文章!