- PR -

奇数、偶数の判断の方法

投稿者投稿内容
Wata
ぬし
会議室デビュー日: 2003/05/17
投稿数: 279
投稿日時: 2003-12-12 12:09
引用:

begoodさんの書き込み (2003-12-12 11:47) より:
負数は2で割ると問題があるのでしょうか?


以下のように置き換えてみれば原因がわかると思いますよ。
コード:
public static void main(String[] args) {

  for (int i = 0; i < 10; i++) {
     show1(5 - i);
  }
}
public static void show1(int i1) {
  int flag1 = i1 % 2;
  System.out.println(i1 + " >> " + flag1);

  if (i1 > 0) {
     if (flag1 == 0) {
        System.out.println("正:偶数");
     }
     if (flag1 == 1) {
        System.out.println("正:奇数");
     }
  }
  if (i1 <= 0) {
     if (flag1 == 1) {
        System.out.println("負:奇数");
     }
     if (flag1 == 0) {
        System.out.println("負:偶数");
     }
  }
}

begood
ベテラン
会議室デビュー日: 2003/09/12
投稿数: 97
お住まい・勤務地: とうきょー
投稿日時: 2003-12-12 12:40
あはは、そうですね。ありがとうございます。小学生の算数のようなことを聞いてしまいました。(^^;
コガちゃん
会議室デビュー日: 2003/12/13
投稿数: 10
投稿日時: 2003-12-14 13:32
すみません、2ページ目があるのを知らずに投稿してしまいました。
(ちょっとタイムリーでないですけど)

COBOL開発者の方などCやJava以外の人には理解できない文法なので、使うときには必ずコメントを入れたほうがいいと思います。
if((i & 1) == 0){ //偶数なら
  //処理
}else{ //奇数なら
  //処理
}


[ メッセージ編集済み 編集者: コガちゃん 編集日時 2003-12-14 13:35 ]

[ メッセージ編集済み 編集者: コガちゃん 編集日時 2003-12-14 13:39 ]
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2003-12-14 14:03
引用:

COBOL開発者の方などCやJava以外の人には理解できない文法なので、使うときには必ずコメントを入れたほうがいいと思います。


XP的手法にならい、コメントが必要な箇所はリファクタリング対象ということで、
コード:
private boolean isEvenNumber(final int i) {
  return (i & 1) == 0 ? true : false;
}

void foo() {
  ……

  if (isEvenNumber(i) {
    // しょり。
  }
  else {
    // しょり。
  }

  ……
}


とするのも、ありかな。

# 私なら、さらに進めて、isEvenNumber()をUtility関数として別モジュールに分離するかも。
begood
ベテラン
会議室デビュー日: 2003/09/12
投稿数: 97
お住まい・勤務地: とうきょー
投稿日時: 2003-12-15 09:14
引用:

COBOL開発者の方などCやJava以外の人には理解できない文法なので、使うときには必ずコメントを入れたほうがいいと思います。
if((i & 1) == 0){ //偶数なら
  //処理
}else{ //奇数なら
  //処理
}




ここまでコメントをいれると、コメントとして、意味がなくなってしまうような・・・。通常、コメントはどの処理がどのようなものを意味するのかをコメントしたほうがよいかと思います。文法までコメントするときりがなくなってしまうと思われ・・・
まぁ、人それぞれになってしまいますが・
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2003-12-15 11:30
引用:

begoodさんの書き込み (2003-12-15 09:14) より:

ここまでコメントをいれると、コメントとして、意味がなくなってしまうような・・・。通常、コメントはどの処理がどのようなものを意味するのかをコメントしたほうがよいかと思います。文法までコメントするときりがなくなってしまうと思われ・・・
まぁ、人それぞれになってしまいますが・



「最下位ビットが0なら」のようなコメントであればその通りなんですが、ビット演算に対して「偶数なら」は至極真っ当だと思いますよ。

コメントなしであのビット演算が出てきたら、私なら一瞬ギョッとします。
Jun
大ベテラン
会議室デビュー日: 2003/08/25
投稿数: 141
投稿日時: 2003-12-18 18:17
引用:

しっかり割り算する必要はなく、最後のビットが立っているかどうかで判定できますので、C 言語やアセンブリ言語経験者ならこう記述するかもしれません。




剰余を求める演算はシフト命令だがビット積なら1を累算器に入れる必要があるので
アセンブラを意識するなら剰余をつかうのが普通かなと思ってました
Jun
大ベテラン
会議室デビュー日: 2003/08/25
投稿数: 141
投稿日時: 2003-12-18 18:31
もう3ページもいっていたのですね.
タイムリーでなかった
ごめんなさい

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