ゆるゆるプログラミング

・偶数・奇数

偶数とは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演算

■関連コンテンツ

数学関数について 数学関数について解説

■新着情報

2020.06.03 円を描く(テキスト版) テキストを円を描く
2020.06.02 文字の間違い探し どの文字が違う?
2020.05.31 九九(くく)の表を作る2 掛け算なしで九九(くく)の表を作成
2020.05.07 サイコロの出目確率 サイコロの目のでる確率は?

■広告

フィギュア予約最大25%OFF+ポイント5%還元!ホビーサーチ

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

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

 

 

 

 

 

 

 

 

Topへ