我想使用一些整数类型作为位掩码。我想知道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);
这也适用于其他内置 int 类型以及用户定义类型。
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.
希望能帮助到你。
答案是1+log2((UINTMAX_MAX>>1)+1)
它也可以通过重复移位计数位来得出。