假设我想编写一个最小标准编译器,并且我已经到了需要实现整型的地步。我假设我可以根据此表最小化整数类型的大小是否正确?
char
:标准要求 sizeof(char)
始终为 1。因此为 1 个字节。
short
:必须至少有 2 个字节。因此为 2 个字节。
int
:必须不小于short
。因此 2 个字节。
long
:必须不小于int
。因此 2 个字节。
long long
:必须比long
长。因此 17 位(即 -65536 到 +65535)如果我实现二进制补码:我认为这是我可以做出的选择。
bool
:标准不指定大小。因此 1 位。
我知道我不需要支持 std::int64_t
及其未签名的表亲。我需要支持 std::int32_t
还是编译器自行决定?
整数类型的实际大小因实现而异。标准只需要数据类型之间的大小关系和每种数据类型的最小大小:
关系要求是long long
不小于long
,long
不小于int
,int
不小于短
。由于 char
的大小始终是支持的最小数据类型,因此所有其他数据类型都不能更小。
char
的最小大小为 8 位,short
和 int
的最小大小为 16 位,long
是 32 位,long long
必须至少包含 64 位。
要获取每种类型的最大/最小数量,您可以调用:
#include <limits>
const int min_int = std::numeric_limits<int>::min();
const int max_int = std::numeric_limits<int>::max();
或C方案:
#include <limits.h>
const int min_int = INT_MIN;
const int max_int = INT_MAX;