logo

Javaのビット演算子

Java では、 オペレーター 指定された操作を実行するシンボルです。このセクションでは、以下についてのみ説明します。 ビット演算子とその型 適切な例とともに。

ビット演算子の種類

Java には、次の 6 種類のビット演算子があります。

  • ビットごとの AND
  • ビットごとの排他的論理和
  • ビットごとの包含的 OR
  • ビットごとの補完
  • ビットシフト演算子
オペレーター シンボル 用途
ビットごとの AND & オプ1とオプ2
ビットごとの排他的論理和 ^ オプ 1 ^ オプ 2
ビットごとの包含的 OR | OP1 | OP2
ビットごとの補完 ~ OP
ビット単位の左シフト << オプ1 << オプ2
ビット単位の右シフト >> オプ1 >> オプ2
符号なし右シフト演算子 >>> に >>> シフトする場所の数

ビット演算子について詳しく説明しましょう。

ビット単位の AND (&)

という記号で表される二項演算子です。 & 。両方のビットが 1 の場合にのみ 1 を返し、それ以外の場合は 0 を返します。

Javaのビット演算子

Java プログラムでビットごとの AND 演算子を使用してみましょう。

Q1は何月ですか

BitwiseAndExample.java

 public class BitwiseAndExample { public static void main(String[] args) { int x = 9, y = 8; // bitwise and // 1001 &amp; 1000 = 1000 = 8 System.out.println(&apos;x &amp; y = &apos; + (x &amp; y)); } } 

出力

 x &amp; y = 8 

ビット単位の排他的論理和 (^)

という記号で表される二項演算子です。 ^ (キャレットと発音します)。両方のビットが同じ場合は 0 を返し、それ以外の場合は 1 を返します。

Javaのビット演算子

Java プログラムでビットごとの排他的 OR 演算子を使用してみましょう。

BitwiseXorExample.java

 public class BitwiseXorExample { public static void main(String[] args) { int x = 9, y = 8; // bitwise XOR // 1001 ^ 1000 = 0001 = 1 System.out.println(&apos;x ^ y = &apos; + (x ^ y)); } } 

出力

 x ^ y = 1 

ビットごとの包含的 OR (|)

という記号で表される二項演算子です。 | (パイプと発音します)。いずれかのビットが 1 の場合は 1 を返し、それ以外の場合は 0 を返します。

Javaのビット演算子

Java プログラムでビット単位の包含 OR 演算子を使用してみましょう。

BitwiseInclusiveOrExample.java

 public class BitwiseInclusiveOrExample { public static void main(String[] args) y = &apos; + (x } 

出力

 x | y = 9 

ビット単位の補数 (~)

記号で示される単項演算子です。 (チルダとして発音します)。ビットの逆数または補数を返します。すべての 0 が 1 になり、すべての 1 が 0 になります。

Javaで倍増する
Javaのビット演算子

Java プログラムでビット単位の補数演算子を使用してみましょう。

BitwiseComplimentExample.java

 public class BitwiseComplimentExample { public static void main(String[] args) { int x = 2; // bitwise compliment // ~0010= 1101 = -3 System.out.println(&apos;~x = &apos; + (~x)); } } 

出力

 ~x = -3 

ビットシフト演算子

シフト演算子は、ビットを右または左にシフトする場合に使用されます。任意の数値を 2 で除算または乗算する場合は、シフト演算子を使用できます。ビットをシフトする一般的な形式は次のとおりです。

 variable &lt;&gt; number of places to shift; 

たとえば、a=10 の場合、

 a&gt;&gt;2; //shifts two bits a&gt;&gt;4; //shifts 4 bits 

Java では、次のタイプのシフト演算子が提供されます。

  • 符号付き右シフト演算子またはビット単位の右シフト演算子
  • 符号なし右シフト演算子
  • 符号付き左シフト演算子またはビット単位の左シフト演算子

注: Java は符号なし左シフト演算子 (<<) をサポートしていません。<).< h4>

符号付き右シフト演算子 (>>)

符号付き右シフト演算子は、数値のビット パターンを次の方向にシフトします。 指定された位置数を持ち、0 を埋めます。演算子は記号で示されます。 >>。 また、左端のビット (符号ビット) も保持されます。もし 0 が左端のビットに表示されている場合、その数値は ポジティブ 。もし 1 が左端のビットに表示されている場合、その数値は ネガティブ

一般に、a>>n と書くと、数値のビットを指定された位置 (n) で右にシフトすることを意味します。数学の用語では、符号付き右シフト演算子は次のように表すことができます。

Javaのビット演算子

注: 正の数値に右シフト演算子を適用すると、結果にも正の数値が得られます。同様に、負の数値に右シフト演算子を適用すると、結果にも負の数値が得られます。

例: x = 256 および x = -256 の場合、指定された位置 4 で符号付き右シフト演算子を適用します。

x = 256 の場合

256>>4

256/24= 16

x = -256 の場合

-256 >>4

-256/24= -16

クイックソートアルゴリズム

上記の例では、演算子をシフトした後、256 が 16 に変換され、-256 が -16 に変換されることがわかりました。

Java プログラムを作成し、左シフト演算子を実装してみましょう。

SignedRightShiftOperatorExample.java

 public class SignedRightShiftOperatorExample { public static void main(String args[]) { int x = 50; System.out.println(&apos;x&gt;&gt;2 = &apos; + (x &gt;&gt;2)); } } 

出力

 x&gt;&gt;2 = 12 

符号付き左シフト演算子 (<<)< strong>

符号付き左シフト演算子 (<<) shifts a bit pattern to the left. it is represented by symbol <<.< strong>また、左端のビット (符号ビット) も保持されます。符号ビットは保持されません。

一般に、< と書くと、 Javaのビット演算子

例 1: a< をシフトした後の結果はどうなるか<3. the value of a is 20.< strong>

20 を 2 進数で表すと = 00010100

左シフト演算子を実行すると、次の結果が得られます。

a << 3 = 10100000 (最後の 3 ビットは埋められたビットです)

<< 3 = 160

計算式を使って結果を確認してみましょう。

20 << 3

20*23= 20*8 = 160

例 2: a< をシフトした後の結果はどうなるか<2. the value of a is -10.< strong>

-10 を 2 進数で表すと = 11110110

ああ<<2 11011000='<strong' =>-40

計算式を使って結果を確認してみましょう。

-10 << 3

np.sum

-10*22= -10*4 = -40

Java プログラムを作成し、符号付き左シフト演算子を実装してみましょう。

SignedLeftShiftOperatorExample.java

 public class SignedLeftShiftOperatorExample { public static void main(String args[]) { int x = 12; System.out.println(&apos;x&lt;<1 = ' + (x << 1)); } < pre> <p> <strong>Output</strong> </p> <pre> x&lt;<1 24 = < pre> <h3>Unsigned Right Shift Operator (&gt;&gt;&gt;)</h3> <p>It shifts a zero at the leftmost position and fills 0. It is denoted by the symbol <strong>&gt;&gt;&gt;.</strong> Note that the leftmost position after &gt;&gt; depends on the sign bit. It does not preserve the sign bit.</p> <p> <strong>Example: If a=11110000 and b=2, find a&gt;&gt;&gt;b?</strong> </p> <p>a &gt;&gt;&gt; b = 11110000 &gt;&gt;&gt; 2 = <strong>00111100</strong> </p> <p>The left operand value is moved right by the number of bits specified by the right operand and the shifted bits are filled up with zeros. Excess bits shifted off to the right are discarded.</p> <p>Therefore, before shifting the bits the decimal value of a is 240, and after shifting the bits the decimal value of a is 60.</p> <p>Let&apos;s create a Java program and use the unsigned right shift operator.</p> <p> <strong>UnsignedRightShiftOperatorExample.java</strong> </p> <pre> public class UnsignedRightShiftOperatorExample { public static void main(String args[]) { int x = 20; System.out.println(&apos;x&gt;&gt;&gt;2 = &apos; + (x &gt;&gt;&gt;2)); } } </pre> <p> <strong>Output</strong> </p> <pre> x&gt;&gt;&gt;2 = 5 </pre> <hr></1></pre></1>

出力

 x&gt;&gt;&gt;2 = 5