是否可以知道整数类型中有多少位?

时间:2013-02-22 09:21:39

标签: c++ c++11 language-lawyer

我想使用一些整数类型作为位掩码。我想知道哪个n保证从0到2^n-1的任何数字都是这种类型的avaliablle。 (实际上我将使用uintmax_t

我知道它通常是8 * sizeof(uintmax_t)(或可能CHAR_BIT * sizeof(uintmax_t)),但我想这不能保证。

所以我想要找到n其他方式。

我如何实现这一目标?

3 个答案:

答案 0 :(得分:3)

sizeof operatorCHAR_BIT

结合使用没有任何问题
const std::size_t nBits = CHAR_BIT * sizeof(some_integer_type);

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

答案 1 :(得分:2)

使用the cstdint include

它为整数类型提供跨平台的固定大小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)

也可以通过重复移位来计算位数。