Java で定義されたビット演算は、int、long、short、char、byte などの整数型に適用されます。
ビット演算子は、主にオペランドの 2 進数のビットに対する演算を実行するために使用されます。演算結果が負の数値の場合、ビット演算は 2 進数に基づいた計算を表します。 。
Java 言語のビット演算子は、ビット論理演算子とビット シフト演算子の 2 つのカテゴリに分類されます。
ビット単位の AND 演算:
ビット単位の AND 演算は、2 つの整数データ a と b に対してビット単位の演算を実行し、演算結果は整数データ c になります。アルゴリズムは次のとおりです。2 つのデータ a と b の対応するビットが両方とも 1 の場合、c のビットは 1 になり、それ以外の場合は 0 になります。
例えば:
a:0 1 0 1 0 0 1 1
b:0 0 1 1 1 0 1 0
c:0 0 0 1 0 0 1 0
ビットごとの OR 演算:
ビット単位の OR 演算は、2 つの整数データ a および b に対してビット単位の演算を実行し、演算結果は整数データ c になります。アルゴリズムは次のとおりです。2 つのデータ a と b の対応するビットが両方とも 0 の場合、c のビットは 0、そうでない場合は 1 になります。
例えば:
a:0 1 0 1 0 0 1 1
b:0 0 1 1 1 0 1 0
c: 0 1 1 1 1 0 1 1
ビット単位の NOT 演算:
ビット単位の NOT 演算は、整数データ a に対してビット単位の演算を実行し、演算の結果は整数データ c になります。アルゴリズムは、データ a の対応するビットが 0 の場合、c のビットは 1、それ以外の場合は 0 です。
例えば:
a:0 1 0 1 0 0 1 1
c:1 0 1 0 1 1 0 0
ビット単位の XOR 演算:
ビット単位の XOR 演算は、2 つの整数データ a および b に対してビット単位の演算を実行し、演算の結果は整数データ c になります。アルゴリズムは次のとおりです。2 つのデータ a と b の対応するビットが同じである場合、c のビットは 0 になり、そうでない場合は 1 になります。
例えば:
a:0 1 0 1 0 0 1 1
b:0 0 1 1 1 0 1 0
c:0 1 1 0 1 0 0 1
ビット単位の右シフト演算:
ビット単位の右シフト演算のアルゴリズムは次のとおりです。すべての数値を 2 進形式の対応する桁数だけ右に移動し、下位ビットをシフトアウト (破棄) し、上位ビットの空のビットを 0 で埋めます。
例: 整数 83 を 1 ビット右にシフトします。
変速前:0 1 0 1 0 0 1 1
シフト後:0 0 1 0 1 0 0 1
ビット単位の左シフト演算:
ビット単位の左シフト演算のアルゴリズムは、すべての数値をバイナリ形式の対応する桁数だけ左にシフトし、上位ビットをシフトアウト (破棄) し、下位ビットの空のビットを 0 で埋めることです。
例: 整数 83 を 1 ビット左にシフトします。
変速前:0 1 0 1 0 0 1 1
シフト後:1 0 1 0 0 1 1 0
例:
publicclassMain{publicstaticvoidmain(String[]args){inta=83;/*83=01010011*/intb=58;/*58=00111010*/intc=0;c=a&b;/*18=00010010*/System.out .println(a&b=+c);c=a|b;/*123=01111011*/System.out.println(a|b=+c);c=~a;/*01010011 は、否定後の値は 10101100 です。 10101100 の補数は 11010100、-84=11010100*/System.out.println(~a=+c);c=a^b;/*105=01101001*/System.out.println(a^b=+ c) );c=a>>1;/*41=00101001*/System.out.println(a>>2=+c);c=a<<1;/*166=10100110*/System.out. (a<<2=+c);}}
実行結果は次のとおりです。
a&b=18a|b=123~a=-84a^b=105a>>2=41a<<2=166