通常、プログラマは、int、float、double、String などのデータ型の変数、または Array、List、ArrayList などのコレクションを操作します。場合によっては、プログラマーはデータを抽出して操作するために、バイトおよびビット レベルでデータをさらに深く掘り下げる必要があります。 Java や C# などの言語では、ビット レベルでデータを操作できます。つまり、バイト内の特定のビットにアクセスできます。このトピックでは、Java でのビット操作について学びます。
Java でのビット操作は、データ圧縮やデータ暗号化に取り組むときに必要になることが多く、プログラマはビット レベルでデータを抽出して元のデータをエンコード、デコード、または圧縮する必要があります。この記事の後半で説明するビット操作の応用例は他にもたくさんあります。
無料ソフトウェア開発コースを始めましょう
Web 開発、プログラミング言語、ソフトウェア テスト、その他
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 つのオペランドを取り、記号「|」で示される二項演算子です。 ”。ビット単位の演算子は、2 つのオペランドの対応するビットを比較します。いずれかのオペランド ビットが 1 の場合、出力は 1 になります。そうでない場合は 0 になります。
例
15 = 00001111 (バイナリ)
27 = 00011011 (バイナリ)
15 と 27 のビット単位の OR 演算
00001111
| 00011011
________
00011111 = 31 (10 進数)
Java プログラム
public class BitwiseOR { public static void main(String[] args) { int operand1 = 15, operand2 = 27, output = operand1 | operand2; System.out.println(output); } }
出力:
これもビット単位の演算子で、2 つのオペランドを受け取り、記号「&」で示されます。ビット単位の演算子は、2 つのオペランドの対応するビットを比較します。両方のオペランド ビットが 1 の場合、出力は 1 になります。それ以外の場合は 0.
例
15 = 00001111 (バイナリ)
27 = 00011011 (バイナリ)
15 と 27 のビット単位の AND 演算
00001111
| 00011011
________
00001011 = 11 (10 進数)
Java プログラム
public class BitwiseAND { public static void main(String[] args) { int operand1 = 15, operand2 = 27, output = operand1 & operand2; System.out.println(output); } }
出力:
これまで説明してきた他の 2 つの演算子とは異なり、この演算子はオペランドを 1 つだけ取り、記号「~」を表します。この演算子はオペランドのビットを反転します。オペランド ビットが 0 の場合は 1 に変換され、その逆も同様です。
例
15 = 00001111 (バイナリ)
15
のビット単位の補数演算
~ 00001111
________
11110000 = 240 (10 進数)
Java プログラム
public class BitwiseComplement { public static void main(String[] args) { int operand= 15, output; output= ~operand; System.out.println(output); } }
出力:
ビットごとの XOR は、2 つのオペランドを受け取り、記号「^」で表す二項演算子です。この演算子は、2 つのオペランドの対応するビットを比較し、異なる場合は出力として 1 を返し、それ以外の場合は 0 を返します。
ビット単位の XOR 演算子は、(ビット単位の OR + ビット単位の補数) と同等です
例
15 = 00001111 (バイナリ)
27 = 00011011 (バイナリ)
15 と 27 のビット単位の XOR 演算
00001111
^ 00011011
________
00010100 = 20 (10 進数)
Java プログラム
public class BitwiseXor { public static void main(String[] args) { int operand1= 15, operand2 = 27, output; output = operand1 ^ operand2; System.out.println(output); } }
出力:
左シフト ビット単位演算子は、オペランドで指定された特定の回数だけビット パターンを左にシフトします。左シフト演算子は、記号「<<」で表されます。
例
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); } }
出力:
符号付き右シフト演算子は、上位位置にゼロ ビットがシフトされることを除いて、左シフト演算子とまったく同じように機能します。
例
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); } }
出力:
右シフト演算子は、オペランドで指定された特定のビット数だけゼロを左端の位置にシフトします。
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); } }
出力:
記事の最後に到達したので、この記事で説明した重要なポイントを要約して締めくくりましょう。ビット操作とは何か、そしてそのさまざまな使用例を見てきました。また、さまざまな種類のビットごとの演算子 (ビットごとの AND、ビットごとの OR、ビットごとの補数、およびビットごとの XOR) とビット シフト演算子 (符号付き左シフト演算子、符号付き右シフト演算子、および符号なし右シフト演算子) を例とサンプルとともに学習しました。個々の演算子を説明する Java プログラム。
以上がJava でのビット操作の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。