- - PR -
奇数、偶数の判断の方法
1|2|3|4
次のページへ»
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-11-28 12:21
お世話になっています。
突然ですが、皆さんInteger型の中に入った数値が奇数なのか偶数なのかを どのように確かめていますか? 私は下記のように確認しようと思ったのですが、なぜか"i"に1が入った時は 偶数になってしまいます。 if((i % 2 == 0) && (i != 0)) { 偶数 } else { 奇数 } 皆様の、色々な判断方法をお聞かせください。 | ||||||||
|
投稿日時: 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-11-28 13:20
>i % 2
剰余算ですよね。 iを2で割った時の余りが求まります。 i=1の時 1÷2の余りは0となります。 よって、この判定条件ですと偶数と判定 されてしまうわけです。 if((i % 2 == 0) && (i != 0)) { 偶数 } else { 奇数 } 判定方法としては私もインギさんが示した方法がよいと 思います。 | ||||||||
|
投稿日時: 2003-11-28 13:25
ん??そうなりますか? 1÷2の場合、商は0、余り1となる気が。。。 なんか、私ものすごい勘違いしてます(^−^;)?? | ||||||||
|
投稿日時: 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が偶数か奇数かって、どうなんでしたっけ? 順番的に奇数では、ない気がしますけど... | ||||||||
|
投稿日時: 2003-11-28 14:47
実際にやってみればわかりますが、1%2 は 1 ですよ。
また、ゼロは通常、偶数として扱います。 | ||||||||
|
投稿日時: 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のはずですよ・・・。 | ||||||||
|
投稿日時: 2003-11-28 14:50
ですよねえ。。。良かった
そもそもは、奇数とか偶数とかっていう呼び名自体、自然数の集合にしか適用できない概念でしたよね?確か。 ところで、私もEmacs信者です。シェルはreadlineライブラリ装備のbashじゃないとダメで、EclipseもエディタはEmacsキーバインド(中途半端なんですが、、、)を使ってます。 おっと、vi派のみなさま、喧嘩する気はないので悪しからず。 | ||||||||
1|2|3|4
次のページへ»
