ホームページ  >  記事  >  Java  >  Java でのビット操作

Java でのビット操作

王林
王林オリジナル
2024-08-30 15:59:40809ブラウズ

通常、プログラマは、int、float、double、String などのデータ型の変数、または Array、List、ArrayList などのコレクションを操作します。場合によっては、プログラマーはデータを抽出して操作するために、バイトおよびビット レベルでデータをさらに深く掘り下げる必要があります。 Java や C# などの言語では、ビット レベルでデータを操作できます。つまり、バイト内の特定のビットにアクセスできます。このトピックでは、Java でのビット操作について学びます。

Java でのビット操作は、データ圧縮やデータ暗号化に取り組むときに必要になることが多く、プログラマはビット レベルでデータを抽出して元のデータをエンコード、デコード、または圧縮する必要があります。この記事の後半で説明するビット操作の応用例は他にもたくさんあります。

無料ソフトウェア開発コースを始めましょう

Web 開発、プログラミング言語、ソフトウェア テスト、その他

Java は、ビット レベルで演算を実行するための 3 ビット シフトと 4 つのビット単位演算子をサポートしています。これらの演算子を整数型 (int、short、long、byte) で使用して、ビット レベルで演算を実行できます。

Java のビット演算子とビットシフト演算子

演算子は次のとおりです:

Operator Description
& Bitwise AND
| Bitwise OR
~ Bitwise Complement
<< Left Shift
>> Right Shift
^ Bitwise XOR
>>> Unsigned Right Shift

Java のビット操作の演算子

演算子をさらに詳しく見てみましょう。

1.ビット単位の OR

これは 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);
}
}

出力:

Java でのビット操作

2.ビット単位の AND

これもビット単位の演算子で、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);
}
}

出力:

Java でのビット操作

3.ビット単位の補数

これまで説明してきた他の 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);
}
}

出力:

Java でのビット操作

注: Java プログラムを実行すると、出力として 240 ではなく -16 が返されます。これは、コンパイラーがその数値の 2 の補数、つまり 2 進数の負の概念を示すためです。
任意の数値の 2 の補数は -(n+1) と同等です。ここで、n は 2 の補数を計算する数値です。この場合、オペランド 15 の 2 の補数は -16 で、これがプログラムの出力です。

4.ビットごとの XOR

ビットごとの 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);
}
}

出力:

Java でのビット操作

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);
}
}

出力:

Java でのビット操作

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);
}
}

出力:

Java でのビット操作

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 でのビット操作

記事の最後に到達したので、この記事で説明した重要なポイントを要約して締めくくりましょう。ビット操作とは何か、そしてそのさまざまな使用例を見てきました。また、さまざまな種類のビットごとの演算子 (ビットごとの AND、ビットごとの OR、ビットごとの補数、およびビットごとの XOR) とビット シフト演算子 (符号付き左シフト演算子、符号付き右シフト演算子、および符号なし右シフト演算子) を例とサンプルとともに学習しました。個々の演算子を説明する Java プログラム。

以上がJava でのビット操作の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。