2015.11.17

数学

偶数・奇数

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

偶数

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ソースコード - 演算子%を利用

ここでは、与えられた整数偶数奇数かを判定するプログラムを解説します。

以下が、その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;

int型変数に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ソースコード - 整数の割り算と掛け算を利用

次に、違う判定方法を使った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 + "は奇数" );

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

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が同じであれば偶数、違えば奇数と判定しています。

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 + "は奇数" );

下の図は、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演算

以上です。

関連コンテンツ

数学に関係するJavaのメソッドやソースコードなどを紹介しています。

2022.10.25

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

2020.03.23

市松模様の画像をJavaで作ってきませんか?サンプルソースを使って、作り方を詳しく説明しています。

2019.03.04

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

2020.03.23

割り算で割り切れずに残った端数を剰余(余り)といいます。この剰余の計算をJavaのソースコードを使って解説しています。

2020.03.23

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

2022.09.10

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

2022.07.07

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

2022.07.27

画像フォーマット形式・色・大きさ・傾きなどの変更、特定の図形(文字・記号など)を見つけたり、取り出したりする画像処理について詳しく解説。

2015.11.29

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

2022.10.17

条件式を判断して処理を分岐する方法を詳しく説明しています。

2023.03.20

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

2020.03.23

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

2022.12.13

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

2020.03.23

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

2020.03.23

割り算で「割り切れる」、「割り切れない」ってどういうこと?

自然数と整数って何が違う?

2020.03.23

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

2022.08.03

Javaの演算子'/'を使って割り算を行った結果と注意点などについて説明。

2020.03.23

数値を2進数で表したときの各桁の「0」と「1」に対して演算を行えます。4種類の演算、AND(論理積)、OR(論理和)、XOR(排他的論理和)、NOT(否定)を詳しく説明しています。

2016.03.26

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

2016.02.16

配列に格納されている値の順番を逆にする反転処理を行うプログラムを紹介しています。Javaのソースコードを使って詳しく解説しています。

2019.09.03

Graphicsオブジェクトにxy-座標とグリッド(格子)を描画するクラスを作成しました。Javaのソースコードで詳しく解説しています。

2023.01.24

1から10の整数値のうち、偶数だけをコンソール出力するJavaのソースコードを紹介しています。for文を使って作成しています。

2022.09.05

1から10の整数値のうち、偶数だけをコンソール出力するJavaのソースコードを紹介しています。while文を使って作成しています。

2022.09.05

1から10の整数値のうち、奇数だけをコンソール出力するJavaのソースコードを紹介しています。for文を使って作成しています。

2022.09.05

1から10の整数値のうち、奇数だけをコンソール出力するJavaのソースコードを紹介しています。while文を使って作成しています。

2022.09.05

できるだけ隙間がなくなるように円を並べて出来る模様の画像を作成する方法を紹介。

2019.06.17

1+2+3+ … +Nを計算する公式と、その導き方を掲載しています。

2021.07.03

テキストで表示される市松模様をJavaで作ってきませんか?サンプルソースを使って、作り方を詳しく説明しています。

2019.03.18

広告