ビットマップを使用する必要があります。基本的に、数百の整数のグループの数字を処理するには、 or の配列が必要ですwchar_t
。int16_t
char16_t
何を優先すべきですか?他のものよりも 1 つを使用する利点はありますか?
ビットマップを使用する必要があります。基本的に、数百の整数のグループの数字を処理するには、 or の配列が必要ですwchar_t
。int16_t
char16_t
何を優先すべきですか?他のものよりも 1 つを使用する利点はありますか?
ビットマップが必要な場合は、おそらく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
旗は何枚必要ですか?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 つのフラグを持つことができます。ある選択肢の唯一の利点は、サイズです。組み込みデバイスを使用している場合は、賢明に選択してください。典型的なデスクトップを使用している場合は、ロングのような自由な選択をして、小刻みに動く余地を残してください。