Java でのビットマスク操作

Zeeshan Afridi 2023年10月12日
  1. Java でのビットマスク操作
  2. Java のビット単位の演算子
Java でのビットマスク操作

ビットマスクは、一部のデータのバイナリ表現です。ビットマスキングでは、すべてのデータを 0 や 1 などの 2 桁の数字と見なします。

1true を表し、0false を表すため、これらの 2 桁をブール値として使用することもできます。

Java でのビットマスク操作

ビットマスキングのもう 1つの定義は、数値またはその他のデータをバイナリ表現で視覚化することです。一部のビットは設定され、その他は未設定です。ここで、設定true または 1 を意味し、未設定false または 0 を意味します。

バイナリ値 10011 があるとしましょう。ここで、1 番目、4 番目、および 5 番目のビットはセットであり、2 番目と 3 番目のビットは未設定です。

例を通してビットマスクを理解しましょう。4つの文字 {w,x,y,z} のセットがあり、文字列の異なる表現が必要だとします。

4 ビット {_ _ _ _} のマスクを作成するために、各ビットは、その文字を参照しているかどうかに関する情報を提供します。簡単にするために、バイナリの組み合わせ 1001w,z を意味し、0000 は空の文字列を意味し、1111w, x, y, z を意味します。

ビットとビットマスキングについて理解したので、ビットを操作するために使用されるビット単位の演算子について学習します。

Java のビット単位の演算子

Java のビット単位の演算子は、ビットの操作を実行するために使用されます。これらの演算子は、short、byte、long、char、int などの任意の整数型で使用できます。

さまざまなビット単位の演算子があります。それぞれが異なる目的で使用されます。

これらは次のとおりです。

  1. ビットワイズ AND(&
  2. ビットワイズ OR(|
  3. ビットワイズ補完(~
  4. ビットワイズ XOR(^

Java のビットワイズ AND(&)演算子

AND 演算子は、&で示されるビット単位の演算子です。2つ以上の値を少しずつ計算し、両方の値が true の場合は true を返します。それ以外の場合、false

 1(True) & 1(True)  = 1(True)
0(False) & 0(False) = 0(False)
 1(True) & 0(False) = 0(False)
0(False) & 1(True)  = 0(False)

コード例:

package articlecodesinjava;
public class ArticleCodesInJava {
  public static void main(String[] args) {
    int a = 3;
    int b = 4;

    // bitwise AND
    // 0011 & 0100=0000 = 0
    System.out.println("a & b = " + (a & b));
  }
}

出力:

a & b = 0

Java のビットワイズ OR(|)演算子

OR 演算子も|で示されるビット単位の演算子ですが、AND(&)演算子とは異なります。単一の値が true である場合にのみ、true を返します。それ以外の場合、false

 1(True) | 1(True)  = 1(True)
0(False) | 0(False) = 0(False)
 1(True) | 0(False) = 1(True)
0(False) | 1(True)  = 1(True)

コード例:

package articlecodesinjava;
public class ArticleCodesInJava {
  public static void main(String[] args) {
    int a = 3;
    int b = 4;

    // bitwise OR
    // 0011 & 0100=0000 = 7
    System.out.println("a | b = " + (a | b));
  }
}

出力:

a & b = 7

Java のビット単位の補数(~)演算子

ビット単位の補数(~)演算子は、NOT 演算子とも呼ばれ、ビットパターンを反転させることができます。単一の値で使用されるため、単一の演算子です。

バイナリ番号 10110 があり、ビット単位の補数(~)演算子でこれを否定したいとします。01001 になります。

0 を 1 に、1 を 0 に反転しました。

 ~ 1(True) = 0(False)
~ 0(False) = 1(True)

コード例:

package articlecodesinjava;
public class ArticleCodesInJava {
  public static void main(String[] args) {
    // Initial values
    int a = 3, b;

    // bitwise complement of a
    // a = 011 where b = ~a, b =100
    b = ~a;
    System.out.println("~a = " + b);
  }
}

出力:

~a = -4

Java のビットワイズ XOR(^)演算子

Java ビットワイズ XOR 演算子は、^で示されるバイナリ演算子です。

入力バイナリ値が両方とも異なる場合は、true を返します。ただし、入力値が 0 または 1 のいずれかで同じである場合、結果は false になります。

 1(True) ^ 1(True)  = 0(False)
0(False) ^ 0(False) = 0(False)
 1(True) ^ 0(False) = 1(True)
0(False) ^ 1(True)  = 1(True)

コード例:

package articlecodesinjava;
public class ArticleCodesInJava {
  public static void main(String[] args) {
    // Initial values
    int a = 3;
    int b = 4;

    // bitwise xor
    // 0011 ^ 0100 = 0111 = 7
    System.out.println("a ^ b = " + (a ^ b));
  }
}

出力:

a ^ b = 7
著者: Zeeshan Afridi
Zeeshan Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn