2016.03.26

Javaプログラミング

ビット演算子

ビット(bit)とは、コンピューターが処理する最小のデータ単位で、一般的に0と1の2つの値で表されます。

Javaで扱う数値は、このビットをいくつか集めたものから出来ています。

例えば、byte型変数の場合は8bit、、short型変数の場合は16bit、int型変数の場合は32bitです。

00000000 … 8bit
00000000 00000000 … 16bit
00000000 00000000 00000000 00000000 … 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ソースコード

これを、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進数の桁を左右のどちらかに指定回数だけずらすビットシフトについて詳しく解説しています。

2016.04.03

関連コンテンツ

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

2022.09.10

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

2016.02.16

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

2020.03.23

"-128~127"の範囲の値を持もつことができるbyte型の値を、符号無しのint型の値にする方法は?

2019.07.09

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

2020.03.23

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

2020.03.23

Javaを使った簡単な応用プログラム(生年月日から年齢を計算プログラムなど)を紹介しています。

2022.07.07

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

2022.07.27

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

2022.10.17

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

2020.03.23

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

2022.12.13

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

2020.03.23

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

2020.03.23

2進数の桁を左右のどちらかに指定回数だけずらすビットシフトについて詳しく解説しています。

2016.04.03

コンピューター(computer)の意味を説明しています。

2022.07.22

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

2022.08.03

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

2020.03.23

コンピュータは、いくつかの装置から構成されています。その主な5つの装置(機能)って何?

2022.07.10

ビットマップ画像を構成する画素に赤(R)、緑(G)、青(B)の他に透過(A)を指定することができます。詳しくは、こちら。

2017.10.02

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

2020.03.23

2値化は、画像処理の1つの方法で、カラー画像を2つ色だけで表現する画像に変換することです。この記事では、2値の画像メモリを使って変換しています。

2020.10.13

フルカラーの画像を新しく作る方法を詳しく解説しています。Javaのソースコード付きです。

2020.03.23

縦と横ピクセル数と背景色を渡してPNG形式の画像を新しく作る方法を詳しく解説しています。Javaのソースコード付きです。

2020.03.23

double型のもつ誤差について解説しています。

2016.02.15

カラー画像の輪郭だけを残すプログラムを作ってみませんか?

2019.04.04

フルカラー(24bit)画像を縦横のサイズを2倍の画像に変換するソースコードを解説します。

2020.03.23

横方向に色を滑らかに変化するグラデーション画像を作成する方法を解説しています。ソースコード付きです。

2020.03.23

画像の中心から放射状に色を滑らかに変化するグラデーション画像を作成する方法を解説しています。ソースコード付きです。

2020.03.23

画像の4隅の色を与えてグラデーション画像を作成する方法を解説しています。ソースコード付きです。

2015.12.02

画像って何?

2022.07.25

一般に使われている画像の色の種類ってどんなものがありますか?。色の種類ごとの用途も説明しています。

2015.12.22

一般に使われている画像フォーマットには、いろいろな種類があります。画像フォーマットBMP、JPEG、PNG、GIF、TIFFの特徴を知ってますか?

2015.11.29

偶数・奇数を判定する方法を詳しく説明しています。興味のある方は、ご覧ください。

2015.11.17

乱数を使って指定サイズのノイズ画像を作る方法を解説します。Javaのソースコード付きです。

2016.05.26

乱数を使って指定の画像にノイズ画像を加える方法を解説します。

2016.06.14

乱数を使って指定サイズのノイズ画像を作る方法を解説します。ノイズが発生する割合はパーセントで指定します。

2020.11.11

トランプゲームの1つポーカーの役を判定をプログラムを作成してみませんか?。興味のある方は、ご覧ください。

2020.08.27

広告