2015.11.17
数学
偶数・奇数
・偶数
0,2,4,8,10,…,2k(kは整数)
-2,-4,-8,-10,…,-2k(kは整数)
・奇数
1,3,5,7,9,…,2k+1(kは整数)
-1,-3,-5,-7,-9,…,-(2k+1)(kは整数)
Javaソースコード - 演算子%を利用
EvenOdd.java
001 002 003 004 005 006 007 008 009 010 011 012
public class EvenOdd { public static void main( String[] args ) { // int型変数に7を代入 int a = 7; // 偶数か奇数かを判定 if ( 0 == ( a % 2 ) ) System.out.println( a + "は偶数" ); else System.out.println( a + "は奇数" ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis EvenOdd.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac EvenOdd.java
実行
C:\talavax\javasample>java EvenOdd
出力結果
7は奇数
ここから偶数か奇数かを判定するプログラムについて解説します。
003 004
// int型変数に7を代入 int a = 7;
006 007 008 009 010
// 偶数か奇数かを判定 if ( 0 == ( a % 2 ) ) System.out.println( a + "は偶数" ); else System.out.println( a + "は奇数" );
偶数か奇数かを判定するのに演算子”%”を使ってaの値を2で割った余りを計算しています。7行目のif ( 0 == ( a % 2 ) )は、「aを2で割った余りが0だったら」という意味です。この判定式の余りが0であれば偶数で、余りが1であれば奇数としています。
Javaソースコード - 整数の割り算と掛け算を利用
EvenOdd2.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019
public class EvenOdd2 { public static void main( String[] args ) { // int型変数に7を代入 int a = 7; // 偶数か奇数かを判定 int a2; // aを2で割って、2を掛ける a2 = a / 2; a2 = a2 * 2; // 判定 if ( a == a2 ) System.out.println( a + "は偶数" ); else System.out.println( a + "は奇数" ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis EvenOdd2.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac EvenOdd2.java
実行
C:\talavax\javasample>java EvenOdd2
出力結果
7は奇数
009 010 011 012 013 014 015 016 017
// aを2で割って、2を掛ける a2 = a / 2; a2 = a2 * 2; // 判定 if ( a == a2 ) System.out.println( a + "は偶数" ); else System.out.println( a + "は奇数" );
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が同じであれば偶数、違えば奇数と判定しています。
Javaソースコード - ビット演算を利用
EvenOdd3.java
001 002 003 004 005 006 007 008 009 010 011 012
public class EvenOdd3 { public static void main( String[] args ) { // int型変数に7を代入 int a = 7; // 最下位ビットビットが0であれば偶数 if ( 0 == ( a & 1 ) ) System.out.println( a + "は偶数" ); else System.out.println( a + "は奇数" ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis EvenOdd3.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac EvenOdd3.java
実行
C:\talavax\javasample>java EvenOdd3
出力結果
7は奇数
006 007 008 009 010
// 最下位ビットビットが0であれば偶数 if ( 0 == ( a & 1 ) ) System.out.println( a + "は偶数" ); else System.out.println( a + "は奇数" );
以下の図のように、1とAND演算することで2進数の1の位の有無を知ることができます。int変数(32bit)のAND演算は、32個の全てのビットに対して行われますが、演算するビットXとYの両方のビットが1の場合だけ演算結果が1になるので、変数aと1とAND演算結果は、0または1となります。
以上です。
関連コンテンツ
割り算で「割り切れる」、「割り切れない」ってどういうこと?
数値を2進数で表したときの各桁の「0」と「1」に対して演算を行えます。4種類の演算、AND(論理積)、OR(論理和)、XOR(排他的論理和)、NOT(否定)を詳しく説明しています。