- PR -

奇数、偶数の判断の方法

投稿者投稿内容
taka
常連さん
会議室デビュー日: 2003/09/22
投稿数: 46
投稿日時: 2003-11-28 12:21
お世話になっています。

突然ですが、皆さんInteger型の中に入った数値が奇数なのか偶数なのかを
どのように確かめていますか?

私は下記のように確認しようと思ったのですが、なぜか"i"に1が入った時は
偶数になってしまいます。
if((i % 2 == 0) && (i != 0)) {
 偶数
} else {
 奇数
}

皆様の、色々な判断方法をお聞かせください。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2003-11-28 12:29
細かいつっこみですが、Integer ではなくて int ですね。

> if((i % 2 == 0) && (i != 0)) {
0 って奇数なんでしたっけ?

1のときは "奇数" のパスを通ると思いますが・・・・。どういう確認をしてらっしゃいますか?

しっかり割り算する必要はなく、最後のビットが立っているかどうかで判定できますので、C 言語やアセンブリ言語経験者ならこう記述するかもしれません。
こんな書き方しなくてもたぶんコンパイラが最適化して同等の処理をしてくれるかもしれませんが。

if((i & 1) == 0){
//偶数
}else{
//奇数
}


[ メッセージ編集済み 編集者: インギ 編集日時 2003-11-28 12:47 ]
なべぞう
ベテラン
会議室デビュー日: 2003/07/07
投稿数: 98
お住まい・勤務地: 岡山県
投稿日時: 2003-11-28 13:20
>i % 2

剰余算ですよね。
iを2で割った時の余りが求まります。

i=1の時
1÷2の余りは0となります。

よって、この判定条件ですと偶数と判定
されてしまうわけです。

if((i % 2 == 0) && (i != 0)) {
 偶数
} else {
 奇数
}

判定方法としては私もインギさんが示した方法がよいと
思います。


おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2003-11-28 13:25
引用:

i=1の時
1÷2の余りは0となります。


ん??そうなりますか?
1÷2の場合、商は0、余り1となる気が。。。
なんか、私ものすごい勘違いしてます(^−^;)??
あんぱん
会議室デビュー日: 2003/11/05
投稿数: 3
投稿日時: 2003-11-28 14:25
初めての投稿です。


public class TestKisuu {
public static void main(String[] args) {

int i = Integer.parseInt(args[0]);

System.out.println("割った答え:" + (i / 2));
System.out.println("割った余り:" + (i % 2));

if((i % 2 == 0) && (i != 0)) {
System.out.println("偶数");
} else {
System.out.println("奇数");
}
}
}

上記アプリで動かすと1は、奇数になります。
奇数・偶数の判断は、インギさんのように
((i & 1) == 0)
の判断が好きです。
0が偶数か奇数かって、どうなんでしたっけ?
順番的に奇数では、ない気がしますけど...
Emacs信者
常連さん
会議室デビュー日: 2003/08/10
投稿数: 38
投稿日時: 2003-11-28 14:47
実際にやってみればわかりますが、1%2 は 1 ですよ。

また、ゼロは通常、偶数として扱います。
H2
ぬし
会議室デビュー日: 2001/09/06
投稿数: 586
お住まい・勤務地: 港
投稿日時: 2003-11-28 14:52
2で割り切れる整数は偶数なので0は偶数というのが一般的のようです。

参考
http://mathforum.org/library/drmath/view/57188.html (英語)

> >i % 2
>剰余算ですよね。
>iを2で割った時の余りが求まります。
>i=1の時
>1÷2の余りは0となります。
>よって、この判定条件ですと偶数と判定
>されてしまうわけです。
間違っていませんか?1÷2の余りは1のはずですよ・・・。
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2003-11-28 14:50
引用:

実際にやってみればわかりますが、1%2 は 1 ですよ。


ですよねえ。。。良かった

引用:

また、ゼロは通常、偶数として扱います。


そもそもは、奇数とか偶数とかっていう呼び名自体、自然数の集合にしか適用できない概念でしたよね?確か。

ところで、私もEmacs信者です。シェルはreadlineライブラリ装備のbashじゃないとダメで、EclipseもエディタはEmacsキーバインド(中途半端なんですが、、、)を使ってます。

おっと、vi派のみなさま、喧嘩する気はないので悪しからず。

スキルアップ/キャリアアップ(JOB@IT)