Javaプログラミング学習サイト ゆるゆるプログラミング

2016/04/03 公開

・ビットシフト

ビットシフト(bit)とは、2進数を表現するビット(0と1の2つの値)の桁を左右のどちらかに指定回数だけずらすことです。

ビットシフトには、右にビットの並びをずらす右シフトと、左にずらす左シフトがあります。

①右シフト

 すべてのビットを右にずらします。演算子は、">>"です。

 下図は、bytet型(8bit)の78を右にシフトしている様子を表したものです。1回のシフトで最上位ビット(左端のビット)は必ず0になります。また、シフト前の最下位ビット(右端のビット)は、無くなります。

 条件によって、1回の右シフトには2で割るのと同じ計算になります。2で割ったときの余りは切り捨てです。ここでの条件は、計算する値が整数型で、正の整数であることです。

AND

②左シフト

 すべてのビットを左にずらします。演算子は、"<<"です。

 下図は、bytet型(8bit)の78を左にシフトしている様子を表したものです。1回のシフトで最下ビット(右端のビット)は必ず0になります。また、シフト前の最上位ビット(左端のビット)は、無くなります。

 条件によって、1回の左シフトには2を掛けるのと同じ計算になります。ここでの条件は、計算する値が整数型で、正の整数であることです。 ただし、最上位ビットが1の場合にマイナスの値になるので、シフトの回数が多いとマイナスの値になってしまいます。

OR

これを、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の変数 Javaで扱う変数について解説
色をARGB値に分解 色情報→ARGB

■新着情報

2021.06.23 配列の初期値 配列の生成直後の値は?
2021.06.18 変数の初期値 変数に値を代入しないで計算

■広告

Topへ