- ベストアンサー
ビットデータのチェック方法
C言語でのビットデータのチェック方法についての質問です。 例として、以下のようなのビット(0~31)を用意して unsigned int bit; bit = 010100…00101 という風にデータを与えているとします。 このとき、ビットに1を持つ桁の個数を数えて 010000→1個 、001001 →1個以上 という風に1個しかないか、それ以上あるかを高速で判定したいのですが、どのような方法が考えられるでしょうか。 私が考えた方法としては count = 0; for (i=0 ; i < 32 ; i++){ if ((bit >> i)%2 == 1) count++; if (count > 1) break; } //countが1なら個数は1個、countが0か1以上なら1個でない。 という方法も行いましたが、処理が遅くなってしまいます。 各桁が1の場合(00…010等)のデータを用意しておき、ビットの値を連想配列へ入れて判別するという方法も考えましたがC言語では無理なようです。 可読性や汎用性は問わないものとして、何か良い方法は無いでしょうか? ご存知の方いらっしゃいましたらよろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (4)
- zwi
- ベストアンサー率56% (730/1282)
回答No.4
- tatsu99
- ベストアンサー率52% (391/751)
回答No.3
- Schwarz20
- ベストアンサー率46% (6/13)
回答No.2
- sakusaker7
- ベストアンサー率62% (800/1280)
回答No.1
お礼
いろいろな方法があり、大変勉強になりました。 回答者No.1さんに紹介していただいた「ハッカーのたのしみ」は以前から興味があった本なので今度読んでみたいと思います。 みなさんありがとうございました。