0

この質問では、次のことが指摘されました。

int [ビットマスク用] を使用すると問題が発生します

ビットマスク フラグを格納するために を使用してきunsigned charましたが、char は 1 バイト、つまり 8 ビットであり、マスクには 8 つのオプションしかないため、下限に達してしまいます。

enum options{
 k1=1<<0,
 k2=1<<1,
  .... through to k8
 }

 unsigned char myOption=k2;

たとえば、8 つを超える可能なオプション (およびオプションの組み合わせ、したがって、最初にビットマスクを使用する理由) を格納する場合など、単に 1 つまたは他の型を作成myOptionする必要がありますか? int最強タイプは?

4

2 に答える 2

3

不明な数の「ビット」が必要な場合は、std::vector<bool>クラスのようなものを使用できます。ここを参照してください。

http://www.cplusplus.com/reference/vector/vector-bool/

これは、ビットを使用して bool 値をパックできる vector クラスの特殊化であるため、s の配列よりもスペース効率が高くなりboolます (追加の効率が必要かどうかはあなた次第です)。

もちろん、あなたのアプリケーションが何であるかはわかりません。ビットフィールドを使用する正当な理由はたくさんあります。ただし、単純に true 値と false 値の束を格納している場合は、bool の配列またはこの bool のベクトルのようなものの方が維持しやすいかもしれません(もちろん欠点もありますが、3 ビットが正しいかどうかをテストすることはできません)。マスキングとビットフィールドを使用してできるように、1 回の操作ですべてを設定するため、アプリケーション固有です)。

vector<bool>やや物議をかもしていますが、私は思います。参照: http://howardhinnant.github.io/onvectorbool.html

于 2013-05-15T03:29:51.120 に答える