• 締切済み

偶数パリティ

引数で渡されたデータの最上位ビット偶数パリティを付加する以下の関数について、空欄(1)~(3)に入る値または式について、考えているのですが、どうしても分かりません。自分なりに出した回答について、ご指摘や解説をいただければと思います。 void AddParity(unsigned int :src) { int bit; int cnt; int i; bit = sizeof(int) : { (1) }; for (i = 0, cnt = 0;{ (2) }; i++){ if (*src & (1 << i)) cnt++; } if (cnt & 1) *src |= 1 << (bit -1); else *src{ (3) } ~(1 << (bit -1)); } (1)について 変数「bit」の初期値設定ですが、sizeof関数に何を乗じるのか分かりません。 (2)について for文の条件についてですが、「cnt < ??」 だとは思うんですが、??が分かりません。 (3)について シフト演算で、偶数パリティを付加する処理だろうとは思うんですが、 何が入るのか分かりません・・・

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.4

ANo.3です 0x8001ではなくて0x80000001が上手く処理できないでした ・・・ ヒント (1)は unsigned intのビット数 … sizeof演算子は何の単位を返すのか (2)は 0ビット目から何ビット目まで繰り返すのか (3)は パリティ付加するのは(3)の位置ではなくその前のif文の条件が成立した方です、こちらはパリティをリセットするための処理です

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

この関数では 0x8001 を正しく処理できないでしょう ・・・

  • goo39
  • ベストアンサー率36% (13/36)
回答No.2

> (1)について > 変数「bit」の初期値設定ですが、sizeof関数に何を乗じるのか分かりません。 sizeof関数が何を求める関数かを考えれば答えは出ます。 > (2)について > for文の条件についてですが、「cnt < ??」だとは思うんですが 違いますよ。 全ビットのチェックをしたいので(1)のbitを使います。 > if (cnt & 1) ・・・奇数なら > *src |= 1 << (bit -1); ・・・1をセット > else ・・・偶数なら *src{ (3) } ~(1 << (bit -1)); ・・・0をセットします。 ※8ビットの場合 ~(1 << (bit -1)) を2進で表すと 01111111 となります。

ya-cha
質問者

お礼

ご回答ありがとうございます。 sizeofはコンパイラが変数に割り当てる記憶領域の大きさを、バイト単位で返す演算子だというのは知っているんですが、分かりませんでした・・・。 あと、一部間違ってましたので訂正させてください。 誤) bit = sizeof(int) : { (1) }; 正) bit = sizeof(int) * { (1) }; です。 (2)については、bitをどのように使用して条件とするのか見当もつかないです・・・ (3)は何とか分かりそうなので考えてみます。 ありがとうございました。

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

> 自分なりに出した回答 どこにあるのでしょうか。

関連するQ&A

専門家に質問してみよう