-1

ビットマップを使用する必要があります。基本的に、数百の整数のグループの数字を処理するには、 or の配列が必要ですwchar_tint16_tchar16_t

何を優先すべきですか?他のものよりも 1 つを使用する利点はありますか?

4

2 に答える 2

2

ビットマップが必要な場合は、おそらくstd::bitsetの使用を検討してください。

リンクから引用:

クラス テンプレート ビットセットは、N ビットの固定サイズ シーケンスを表します。ビットセットは、標準の論理演算子で操作し、文字列と整数の間で変換できます。

利点は、ビット数を任意の数に拡張するのが非常に簡単であることです。コンストラクターは、ビットセットを初期化するために整数型を取ることができます。

このドキュメント記事の例を考えてみましょう:

入力

#include <iostream>
#include <bitset>

int main()
{
    std::bitset<8> b1(42);
    for (std::size_t i = 0; i < b1.size(); ++i) {
        std::cout << "b1[" << i << "]: " << b1[i] << '\n';
    }
    b1[0] = true; // modifies the first bit through bitset::refence
    std::cout << "After setting bit 0, the bitset holds " << b1 << '\n';
}

出力

b1[0]: 0
b1[1]: 1
b1[2]: 0
b1[3]: 1
b1[4]: 0
b1[5]: 1
b1[6]: 0
b1[7]: 0
After setting bit 0, the bitset holds 00101011
于 2013-08-05T05:33:59.637 に答える
1

旗は何枚必要ですか?8 が必要な場合は char を使用し、16 が必要な場合は short を使用します。必要なだけのスペースのみを使用しますが、最適化しすぎて自分自身 (またはプロジェクト) を隅に追いやらないように注意してください。

それがどのように機能するのかわからない場合、各フラグは、整数の特定のビットを占める 2 のべき乗のフレンドリ名にすぎません。

1 は最初のビット、2 は 2 番目のビット、4 は 3 番目のビット、8 は 4 番目のビットなどです。

たとえば、2 つのフラグがある場合 READ_ACCESS = 2 (0010) WRITE_ACCESS = 8 (1000)

フラグを読み取り/書き込みに設定すると、整数の値は 10 (1010) になります。

したがって、文字には 8 ビットがあり、8 つのフラグを持つことができます。ある選択肢の唯一の利点は、サイズです。組み込みデバイスを使用している場合は、賢明に選択してください。典型的なデスクトップを使用している場合は、ロングのような自由な選択をして、小刻みに動く余地を残してください。

于 2013-08-05T05:57:16.220 に答える