sizeof(T) * CHAR_BIT 是否保证位大小?
Does sizeof(T) * CHAR_BIT guarantee bit size?
似乎没有任何库函数可以计算类型的位大小。
我认为这可以通过以下方式完成吗?
#include <climits>
template <typename T>
size_t Size_In_Bits(){
return sizeof(T) * CHAR_BIT;
}
这是否总是会返回可以针对一种类型的位数?
sizeof(T) * CHAR_BIT
returns 类型在内存中占用的位数。
然而,位的大小可能比整数可以在数学上使用的位多 - (考虑填充位)。
详细信息:整数具有值位、符号位(有符号整数)和可能的填充位。所有这些位都有助于存储大小。
unsigned char
永远不会有填充位。
这保证为您提供 size(存储)位,但不是 width(值位数)。如果类型有填充位,后者可能会更少。对于无符号类型,您可以通过将 -1 转换为类型(以获取类型中的最大可能值)并计算它们来直接测量值位数。对于有符号类型,std::numeric_limits<T>::max()
可用于获取最大值。或者,如果您已经知道特定类型,则可以使用 limits.h
或 stdint.h
.
中的 xxx_MAX
宏
似乎没有任何库函数可以计算类型的位大小。
我认为这可以通过以下方式完成吗?
#include <climits>
template <typename T>
size_t Size_In_Bits(){
return sizeof(T) * CHAR_BIT;
}
这是否总是会返回可以针对一种类型的位数?
sizeof(T) * CHAR_BIT
returns 类型在内存中占用的位数。
然而,位的大小可能比整数可以在数学上使用的位多 - (考虑填充位)。
详细信息:整数具有值位、符号位(有符号整数)和可能的填充位。所有这些位都有助于存储大小。
unsigned char
永远不会有填充位。
这保证为您提供 size(存储)位,但不是 width(值位数)。如果类型有填充位,后者可能会更少。对于无符号类型,您可以通过将 -1 转换为类型(以获取类型中的最大可能值)并计算它们来直接测量值位数。对于有符号类型,std::numeric_limits<T>::max()
可用于获取最大值。或者,如果您已经知道特定类型,则可以使用 limits.h
或 stdint.h
.
xxx_MAX
宏