ビットマスクとして整数型を使用したい。このタイプではn
、0 から任意の数が使用可能であることが保証されていることを知りたいです。2^n-1
(実際に使う予定ですuintmax_t
)
私はそれが通常8 * sizeof(uintmax_t)
(またはおそらくCHAR_BIT * sizeof(uintmax_t)
)であることを知っていますが、保証されていないと思います.
だから私は、これを別の方法で見つけたいと思っていますn
。
どうすればこれを達成できますか?
ビットマスクとして整数型を使用したい。このタイプではn
、0 から任意の数が使用可能であることが保証されていることを知りたいです。2^n-1
(実際に使う予定ですuintmax_t
)
私はそれが通常8 * sizeof(uintmax_t)
(またはおそらくCHAR_BIT * sizeof(uintmax_t)
)であることを知っていますが、保証されていないと思います.
だから私は、これを別の方法で見つけたいと思っていますn
。
どうすればこれを達成できますか?
と組み合わせてsizeof
演算子を使用しても問題はありません。CHAR_BIT
const std::size_t nBits = CHAR_BIT * sizeof(some_integer_type);
これは、他の組み込み型やユーザー定義型でも機能します。
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.
それが役に立てば幸い。
答えは1+log2((UINTMAX_MAX>>1)+1)
また、シフトを繰り返してビットをカウントすることによって導出することもできます。