我想使用一些整数类型作为位掩码。我想知道哪个n
保证从0到2^n-1
的任何数字都是这种类型的avaliablle。 (实际上我将使用uintmax_t
)
我知道它通常是8 * sizeof(uintmax_t)
(或可能CHAR_BIT * sizeof(uintmax_t)
),但我想这不能保证。
所以我想要找到n
其他方式。
我如何实现这一目标?
答案 0 :(得分:3)
将sizeof
operator与CHAR_BIT
const std::size_t nBits = CHAR_BIT * sizeof(some_integer_type);
这也适用于其他构建int类型以及用户定义类型。
答案 1 :(得分:2)
它为整数类型提供跨平台的固定大小typedef
,为其限制提供宏常量。
#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.
希望它有所帮助。
答案 2 :(得分:1)
答案是1+log2((UINTMAX_MAX>>1)+1)
也可以通过重复移位来计算位数。