アプリ版:「スタンプのみでお礼する」機能のリリースについて

引数で渡されたデータの最上位ビット偶数パリティを付加する以下の関数について、空欄(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)について
シフト演算で、偶数パリティを付加する処理だろうとは思うんですが、
何が入るのか分かりません・・・

A 回答 (4件)

ANo.3です


0x8001ではなくて0x80000001が上手く処理できないでした ・・・

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

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

    • good
    • 0

> (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 となります。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

sizeofはコンパイラが変数に割り当てる記憶領域の大きさを、バイト単位で返す演算子だというのは知っているんですが、分かりませんでした・・・。
あと、一部間違ってましたので訂正させてください。

誤)
bit = sizeof(int) : { (1) };
正)
bit = sizeof(int) * { (1) };

です。

(2)については、bitをどのように使用して条件とするのか見当もつかないです・・・

(3)は何とか分かりそうなので考えてみます。

ありがとうございました。

お礼日時:2008/09/29 17:22

> 自分なりに出した回答



どこにあるのでしょうか。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!