假设我想编写一个最小标准编译器,我已经达到了我需要实现整数类型的程度。假设我可以根据此表最小化整数类型的大小,我是否正确?
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
还是编译器可以自行决定?
答案 0 :(得分:2)
整数类型的实际大小因实现而异。标准只要求数据类型之间的大小关系和每种数据类型的最小大小:
关系要求是long long
不小于long
,int
不小于short
,char
不小于char
。由于short
的大小始终是受支持的最低数据类型,因此所有其他数据类型都不能更小。
int
的最小大小为8位,long
和long long
的最小大小为16位,#include <limits>
const int min_int = std::numeric_limits<int>::min();
const int max_int = std::numeric_limits<int>::max();
的最小大小为32位,#include <limits.h>
const int min_int = INT_MIN;
const int max_int = INT_MAX;
必须包含至少64位。
要获取您可以调用的每种类型的最大/最小数量:
{{1}}
或C解决方案:
{{1}}