2016/03/26 公開
・ビット演算子
ビット(bit)とは、コンピューターが処理する最小のデータ単位で、一般的に0と1の2つの値で表されます。Javaで扱う数値は、このビットをいくつか集めたものから出来ています。例えば、byte型変数の場合は8bit、int型の変数の場合は32bitです。
ビット演算とは、Javaで扱う数値を2進数で表したときの各桁の値(0または1)に対して以下の演算を行うことです。
①AND(論理積)
両方のビットが1であれば1、それ以外は0にします。

下図は、int型(32bit)の14と5をAND演算した例で、32桁の各桁ごとにAND演算を行っています。1桁目の演算結果を右のAND演算の表と対応付けています。

②OR(論理和)
どちらか片方のビットが1であれば1、それ以外は0にします。

下図は、int型(32bit)の14と5をOR演算した例で、32桁の各桁ごとにAND演算を行っています。1桁目の演算結果を右のOR演算の表と対応付けています。

③XOR(排他的論理和)
2つのビットが異なっていれば1、それ以外は0にします。

下図は、int型(32bit)の14と5をXOR演算した例で、32桁の各桁ごとにXOR演算を行っています。1桁目の演算結果を右のXOR演算の表と対応付けています。

④NOT(否定)
ビットが1なら0、0なら1にします。

下図は、int型(32bit)の14をNOT演算した例で、32桁の各桁ごとにNOT演算を行っています。1桁目の演算結果を右のNOT演算の表と対応付けています。

これを、Javaのソースコードにすると以下のようになります。
BitOperator.java ← クリックしてダウンロードページに移動
001: public class BitOperator { 002: public static void main( String[] args ) { 003: int a = 14; // 2進数 1110 004: int b = 5; // 2進数 0101 005: 006: int and = a & b; // AND 007: int or = a | b; // OR 008: int xor = a ^ b; // XOR 009: int not = ~a; // NOT 010: 011: //結果を表示 012: System.out.println( a + " AND " + b + " = " + and ); 013: System.out.println( a + " OR " + b + " = " + or ); 014: System.out.println( a + " XOR " + b + " = " + xor ); 015: System.out.println( "NOT " + a + " = " + not ); 016: } 017: }
出力結果
14 AND 5 = 4 14 OR 5 = 15 14 XOR 5 = 11 NOT 14 = -15
ここからは、このソースコードを上から順番に解説していきます。
001: public class BitOperator {
クラス名を、BitOperatorとしています。
002: public static void main( String[] args ) {
このmainメソッドからプログラムを実行します。
003: int a = 14; // 2進数 1110 004: int b = 5; // 2進数 0101
このプログラムで演算に使うint型の変数aとbを宣言し、値を代入しています。
006: int and = a & b; // AND 007: int or = a | b; // OR 008: int xor = a ^ b; // XOR
変数aとbをAND、OR、XORで演算しています。
009: int not = ~a; // NOT
変数aをNOT演算子で、ビットを反転しています。
011: //結果を表示 012: System.out.println( a + " AND " + b + " = " + and ); 013: System.out.println( a + " OR " + b + " = " + or ); 014: System.out.println( a + " XOR " + b + " = " + xor ); 015: System.out.println( "NOT " + a + " = " + not );
最後に演算結果を表示しています。
■関連コンテンツ
2進数 | 2で繰り上がる数値表現 |
Javaの変数 | Javaで扱う変数について解説 |
byte型をint型へ | byteの値 → 0~255 |
色をARGB値に分解 | 色情報→ARGB |
■新着情報
2021.12.21 | 現在の日時を取得 | いまの年月日、時分秒? |
■広告
