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

2015/11/17 公開

・偶数・奇数

偶数とは2で割り切れる整数で、奇数とは2で割り切れずに1が余る整数です。

偶数

0,2,4,8,10,…,2k(kは整数)

奇数

1,3,5,7,9,…,2k+1(kは整数)

ここでは、与えられた整数偶数奇数かを判定するプログラムを解説します。以下が、そのJavaソースコードです。

EvenOdd.java ← クリックしてダウンロードページに移動
001:    public class EvenOdd {
002:    	public static void main( String[] args ) {
003:    		// int型変数に7を代入
004:    		int a = 7;
005:    
006:    		// 偶数か奇数かを判定
007:    		if ( 0 == ( a % 2 ) )
008:    			System.out.println( a + "は偶数" );
009:    		else
010:    			System.out.println( a + "は奇数" );
011:    	}
012:    }

EvenOddの出力結果

7は奇数

ここから偶数奇数かを判定するプログラムについて解説します。

003:    		// int型変数に7を代入
004:    		int a = 7;

int型変数に7を与えています。この値をいろいろと変更して判定結果を確認してください。

006:    		// 偶数か奇数かを判定
007:    		if ( 0 == ( a % 2 ) )
008:    			System.out.println( a + "は偶数" );
009:    		else
010:    			System.out.println( a + "は奇数" );

偶数か奇数かを判定するのに演算子”%”を使ってaの値を2で割った余りを計算しています。7行目のif ( 0 == ( a % 2 ) )は、「aを2で割った余りが0だったら」という意味です。この判定式の余りが0であれば偶数で、余りが1であれば奇数としています。

次に、違う判定方法を使ったJavaソースコードを紹介します。

以下のソースコードは、整数割り算と掛け算を使った偶数奇数の判定方法を使っています。

EvenOdd2.java ← クリックしてダウンロードページに移動
001:    public class EvenOdd2 {
002:    	public static void main( String[] args ) {
003:    		// int型変数に7を代入
004:    		int a = 7;
005:    
006:    		// 偶数か奇数かを判定
007:    		int a2;
008:    
009:    		// aを2で割って、2を掛ける
010:    		a2 = a / 2;
011:    		a2 = a2 * 2;
012:    
013:    		// 判定
014:    		if ( a == a2 )
015:    			System.out.println( a + "は偶数" );
016:    		else
017:    			System.out.println( a + "は奇数" );
018:    	}
019:    }

EvenOdd2の出力結果

7は奇数

009:    		// aを2で割って、2を掛ける
010:    		a2 = a / 2;
011:    		a2 = a2 * 2;
012:    
013:    		// 判定
014:    		if ( a == a2 )
015:    			System.out.println( a + "は偶数" );
016:    		else
017:    			System.out.println( a + "は奇数" );

ここでの判定は、整数割り算の結果の小数が切り捨てられることを利用しています。

int型変数aを2で割った後に、さらに2を掛けます。この計算結果は必ず偶数になります。値を2で割ることで小数部がなくなるからです。以下を参考にしてください。

 3÷2=1     (1.5の0.5が無くなります。)

 6÷2=3

 7÷2=3     (3.5の0.5が無くなります。)

12÷2=6

さらに、この例の値に2をかけると以下のようになります。

 3÷2=1 → 1×2=2

 6÷2=3 → 3×2=6

 7÷2=3 → 3×2=6

12÷2=6 → 6×2=12

偶数を2で割って2を掛けた結果は計算前の値と同じで、奇数を2で割って2を掛けた結果は計算前の値と違うことが確認できます。このプログラムでは、計算前の変数aの値を2で割って2を掛けた値を変数a2に代入し、その値が計算前の変数aが同じであれば偶数、違えば奇数と判定しています。

以下のソースコードは、ビット演算偶数奇数の判定をしています。

EvenOdd3.java ← クリックしてダウンロードページに移動
001:    public class EvenOdd3 {
002:    	public static void main( String[] args ) {
003:    		// int型変数に7を代入
004:    		int a = 7;
005:    
006:    		// 最下位ビットビットが0であれば偶数
007:    		if ( 0 == ( a & 1 ) )
008:    			System.out.println( a + "は偶数" );
009:    		else
010:    			System.out.println( a + "は奇数" );
011:    	}
012:    }

EvenOdd3の出力結果

7は奇数

006:    		// 最下位ビットビットが0であれば偶数
007:    		if ( 0 == ( a & 1 ) )
008:    			System.out.println( a + "は偶数" );
009:    		else
010:    			System.out.println( a + "は奇数" );

下の図は、2進数の位を表したものです。値が偶数の場合は1の位(最下位ビット)が0で、奇数の場合は1の位(最下位ビット)が1です。

2進数

1の位(最下位ビット)が0か1かは、AND演算を使うことで判定できます。

( 0 == ( a & 1 ) )変数aと数値の1のAND演算を行い、結果が0であれば偶数、0でなければ奇数と判定する条件式です。

以下の図のように、1とAND演算することで2進数の1の位の有無を知ることができます。int変数(32bit)のAND演算は、32個の全てのビットに対して行われますが、演算するビットXとYの両方のビットが1の場合だけ演算結果が1になるので、変数aと1とAND演算結果は、0または1となります。

AND演算

■関連コンテンツ

数学関数について 数学関数について解説
市松模様の画像作成方法を紹介-画像

市松模様

白と黒の市松模様画像を作成する方法を解説しています。

四則演算(足し算/引き算/掛け算/割り算)について-画像

計算結果の表示

足し算(加法)/引き算(減法)/掛け算(乗法)/割り算(除法)の使い方を説明

剰余(余り)を計算した結果を表示するプログラムについて解説-画像

剰余(余り)計算

剰余(余り)をを計算するプログラムの紹介と、その結果を表示する方法を解説

■新着情報

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

■広告

 

 

 

 

 

スッキリわかるJava入門第3版 [ 中山清喬 ]

価格:2,860円
(2021/6/18 14:32時点)
感想(6件)

 

 

 

Topへ