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です。

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となります。

■関連コンテンツ
数学関数について | 数学関数について解説 |
![]() |
市松模様白と黒の市松模様画像を作成する方法を解説しています。 |
![]() |
計算結果の表示足し算(加法)/引き算(減法)/掛け算(乗法)/割り算(除法)の使い方を説明 |
![]() |
剰余(余り)計算剰余(余り)をを計算するプログラムの紹介と、その結果を表示する方法を解説 |
■新着情報
2021.12.21 | 現在の日時を取得 | いまの年月日、時分秒? |
■広告
