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);

这也适用于其他内置 int 类型以及用户定义类型。

于 2013-02-22T09:45:31.373 回答
2

使用包含_cstdint

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.

希望能帮助到你。

于 2013-02-22T10:41:45.470 回答
1

答案是1+log2((UINTMAX_MAX>>1)+1)

它也可以通过重复移位计数位来得出。

于 2013-02-22T09:33:26.830 回答