2016.04.03

Javaプログラミング

ビットシフト(bit shift)

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

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

①右シフト

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

下の図は、bytet型(8bit)の78を右にシフトしている様子を表したものです。

1回のシフトで最上位ビット(左端のビット)は必ず0になります。

また、シフト前の最下位ビット(右端のビット)は、無くなります。

条件によって、1回の右シフトには2で割るのと同じ計算になります。

2で割ったときの余りは切り捨てです。

ここでの条件は、計算する値が整数型で、正の整数であることです。

AND

②左シフト

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

下の図は、bytet型(8bit)の78を左にシフトしている様子を表したものです。

1回のシフトで最下ビット(右端のビット)は必ず0になります。

また、シフト前の最上位ビット(左端のビット)は、無くなります。

条件によって、1回の左シフトには2を掛けるのと同じ計算になります。

ここでの条件は、計算する値が整数型で、正の整数であることです。

ただし、最上位ビットが1の場合にマイナスの値になるので、シフトの回数が多いとマイナスの値になってしまいます。

これを、Javaソースコードにすると以下のようになります。

BitOperator.java

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
public class BitOperator {
	public static void main( String[] args ) {
		int a = 14;	// 2進数 1110
		int b = 5;	// 2進数 0101

		int and = a & b; // AND
		int or  = a | b; // OR
		int xor = a ^ b; // XOR
		int not = ~a;    // NOT

		//結果を表示
		System.out.println( a + " AND " + b + " = " + and );
		System.out.println( a + " OR  " + b + " = " + or );
		System.out.println( a + " XOR " + b + " = " + xor );
		System.out.println( "NOT " + a + " = " + not );
	}
}

コンパイル ソースコードが「ANSI」の場合

C:\talavax\javasample>javac -encoding sjis BitOperator.java

コンパイル ソースコードが「UTF-8」の場合

C:\talavax\javasample>javac BitOperator.java

実行

C:\talavax\javasample>java BitOperator

出力結果

14 AND 5 = 4
14 OR  5 = 15
14 XOR 5 = 11
NOT 14 = -15

Javaソースコードの解説

ここからは、このソースコードを上から順番に解説していきます。

001
public class BitOperator {

クラス名を、BitOperatorとしています。

002
	public static void main( String[] args ) {

このmainメソッドからプログラムを実行します。

003
004
		int a = 14;	// 2進数 1110
		int b = 5;	// 2進数 0101

このプログラムで演算に使うint型変数aとbを宣言し、値を代入しています。

006
007
008
		int and = a & b; // AND
		int or  = a | b; // OR
		int xor = a ^ b; // XOR

変数aとbをANDORXORで演算しています。

009
		int not = ~a;    // NOT

変数aをNOT演算子で、ビットを反転しています。

011
012
013
014
015
		//結果を表示
		System.out.println( a + " AND " + b + " = " + and );
		System.out.println( a + " OR  " + b + " = " + or );
		System.out.println( a + " XOR " + b + " = " + xor );
		System.out.println( "NOT " + a + " = " + not );

最後に演算結果を表示しています。

以上です。

前のコンテンツ

数値を2進数で表したときの各桁の「0」と「1」に対して演算を行えます。4種類の演算、AND(論理積)、OR(論理和)、XOR(排他的論理和)、NOT(否定)を詳しく説明しています。

2016.03.26

関連コンテンツ

Javaの学習に役立つソースコードを多数紹介しています。是非、ご覧ください。

2022.09.10

プログラミングで使う変数って何?

2020.03.23

基本的な計算である足し算(加法)/引き算(減法)/掛け算(乗法)/割り算(除法)を行うプログラム作成。

2020.03.23

「0」と「1」の2つの数字で表される2進数(バイナリ)。一般に使われている10進数に変換するには。

2016.02.16

24ビット(フルカラー)、32ビットカラーからR(赤)、G(緑)、B(青)、A(アルファ値)を抽出する方法を説明しています。

2020.03.23

日本で使われてきた伝統文様「和柄」について解説しています。

2022.07.27

画像フォーマット形式・色・大きさ・傾きなどの変更、特定の図形(文字・記号など)を見つけたり、取り出したりする画像処理について詳しく解説。

2015.11.29

プログラミング、ITに関する用語をまとめています。

2022.10.17

変数やクラスに格納されている値をコンソール出力する方法は?

2020.03.23

プログラムの最初に実行されるメソッドは?

2022.12.13

Javaのプログラムを書いてみませんか?プログラムの書き方をくわしく説明しています。

2020.03.23

「Javaソースコード」から実行可能な「オブジェクトコード」に変換する方法をくわしく説明しています。

2020.03.23

数値を2進数で表したときの各桁の「0」と「1」に対して演算を行えます。4種類の演算、AND(論理積)、OR(論理和)、XOR(排他的論理和)、NOT(否定)を詳しく説明しています。

2016.03.26

コンピュータで扱う情報の量を表す単位って何?メモリ、HDD(ハードディスク)、SSDなどデータを格納する機器の仕様に書いている記号GB,TBとは?

2020.10.12

割り算で割り切れずに残った端数を剰余(余り)といいます。この剰余の計算をJavaのソースコードを使って解説しています。

2020.03.23

自然数と整数って何が違う?

2020.03.23

プログラミング言語とは?種類や特徴について説明しています。

2022.08.03

Javaプログラムの構成について解説しています。詳しくは、こちらをご覧ください。

2020.03.23

変数に値を代入する演算子について詳しく解説しています。サンプルのソースコード付きです。

2020.03.23

広告