ゆるゆるプログラミング

・ビット演算子

ビット(bit)とは、コンピューターが処理する最小のデータ単位で、一般的に0と1の2つの値で表されます。Javaで扱う数値は、このビットをいくつか集めたものから出来ています。例えば、byte型変数の場合は8bit、int型変数の場合は32bitです。

ビット演算とは、Javaで扱う数値を2進数で表したときの各桁の値(0または1)に対して以下の演算を行うことです。

AND(論理積)

 両方のビットが1であれば1、それ以外は0にします。

AND

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

AND

OR(論理和)

 どちらか片方のビットが1であれば1、それ以外は0にします。

OR

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

OR

XOR(排他的論理和)

 2つのビットが異なっていれば1、それ以外は0にします。

XOR

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

XOR

NOT(否定)

 ビットが1なら0、0なら1にします。

NOT

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

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をANDORXORで演算しています。

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で扱う変数について解説

■新着情報

2017.11.17 N値化 カラー画像をN値化する方法について解説
2017.11.16 最も近い値の取得 指定値に最も近い配列の値を取得する方法を解説
2017.10.02 アルファ値(透過) アルファ値(透過)について

■広告

法人向けのETC専用カード

~約8,000名の受講生と80社以上の導入実績~ 企業向けプログラミング研修ならCodeCamp

日本最大級ショッピングサイト!お買い物なら楽天市場

Topへ