【问题标题】:Minimum sizes for integral types [duplicate]整数类型的最小尺寸[重复]
【发布时间】:2014-11-19 23:53:14
【问题描述】:

假设我想编写一个最小标准编译器,并且我已经到了需要实现整数类型的地步。我假设我可以根据此表最小化整数类型的大小是否正确?

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 还是编译器自行决定?

【问题讨论】:

  • en.wikipedia.org/wiki/C_data_types - 你在要求上有点偏离(链接页面适用于 C,但适用于 C++)。
  • @mat:您的链接有帮助。除非您想作为答案,否则我将删除该问题。
  • -1,不敢相信你还不知道你的数据类型大小。这个周末读一本书;-)
  • 阅读这个:cplusplus.com/reference/climits,记住数据类型的大小取决于您的平台和您平台编译器套件上可用的 climits
  • @SlodgeMonster:如果您想构建一个标准编译器,请使用标准作为参考。出于对{插入至高无上的选择}的热爱,不要依赖 MS 来参考 任何东西(除了 MS API,甚至可能不是)...这不是对 MS 的厌恶,而是多年对 MS 处理(又名,忽略)标准的傲慢方式的经验。

标签: c++


【解决方案1】:

整数类型的实际大小因实现而异。标准只要求数据类型之间的大小关系和每种数据类型的最小大小:

关系要求是long long不小于long,不小于int,不小于short。由于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;

【讨论】:

    猜你喜欢
    • 2014-04-23
    • 2010-12-16
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多