sizeof(T)* CHAR_BIT是否保证位大小?

时间:2016-03-08 23:34:04

标签: c++ size byte bit sizeof

似乎没有用于以位为单位计算类型大小的库函数。

我是否可以假设这可以通过以下方式完成?

#include <climits>

template <typename T>
size_t Size_In_Bits(){
    return sizeof(T) * CHAR_BIT;
}

这总是会返回一个类型可以定位的位数吗?

2 个答案:

答案 0 :(得分:3)

这保证以位为单位提供 size (存储),但不提供 width (值位数)。如果类型具有填充位,则后者可以更少。对于无符号类型,您可以通过将-1转换为类型(以获取类型中的最大可能值)并计算它们来直接测量值位数。对于签名类型,std::numeric_limits<T>::max()可用于获取最大值。或者,如果您已经知道具体类型,则可以使用xxx_MAXlimits.h中的stdint.h个宏。

答案 1 :(得分:2)

sizeof(T) * CHAR_BIT返回类型在内存中占用的位数。

然而,比特的大小可能大于数学上可以使用整数的比特 - (考虑填充比特)。

细节:整数具有值位,符号位(有符号整数)和可能的填充位。所有这些位都有助于存储大小。

unsigned char永远不会有填充位。