0

ビットマスクとして整数型を使用したい。このタイプではn、0 から任意の数が使用可能であることが保証されていることを知りたいです。2^n-1(実際に使う予定ですuintmax_t)

私はそれが通常8 * sizeof(uintmax_t)(またはおそらくCHAR_BIT * sizeof(uintmax_t))であることを知っていますが、保証されていないと思います.

だから私は、これを別の方法で見つけたいと思っていますn

どうすればこれを達成できますか?

4

3 に答える 3

3

と組み合わせてsizeof演算子を使用しても問題はありません。CHAR_BIT

const std::size_t nBits = CHAR_BIT * sizeof(some_integer_type);

これは、他の組み込み型やユーザー定義型でも機能します。

于 2013-02-22T09:45:31.373 に答える
2

includeを使用cstdintます。

typedef整数型にはクロスプラットフォームの固定サイズs を、制限にはマクロ定数を提供します。

#include <cstdint>
std::int8_t Signed = 0;    // granted to 8bit size.
std::uint8_t Unsigned = 0; // granted to 8bit size.
Signed = INT8_MAX;        // store the max value for a signed 8bit value.
Unsigned = UINT8_MAX;      // store the max value for an unsigned 8bit value.

それが役に立てば幸い。

于 2013-02-22T10:41:45.470 に答える
1

答えは1+log2((UINTMAX_MAX>>1)+1)

また、シフトを繰り返してビットをカウントすることによって導出することもできます。

于 2013-02-22T09:33:26.830 に答える