首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么C++的int和long类型都是4字节?

为什么C++的int和long类型都是4字节?
EN

Stack Overflow用户
提问于 2012-11-15 21:38:43
回答 8查看 13K关注 0票数 19

包括Microsoft在内的许多来源都将int和long类型引用为4字节,并且具有(signed) -2,147,483,648到2,147,483,647的范围。如果long原语类型实际上没有提供更大范围的值,那么它有什么意义呢?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2012-11-15 21:45:31

关于整数类型,唯一能保证的是:

  1. sizeof(char) == 1
  2. sizeof(char) <= sizeof(short)
  3. sizeof(short) <= sizeof(int)
  4. sizeof(int) <= sizeof(long)
  5. sizeof(long) <= sizeof(long long)
  6. sizeof(char) * CHAR_BIT >= 8
  7. sizeof(short) * CHAR_BIT >= 16
  8. sizeof(int) * CHAR_BIT >= 16
  9. sizeof(long) * CHAR_BIT >= 32
  10. sizeof(long long) * CHAR_BIT >= 64

其他事情都是由实现定义的。

票数 34
EN

Stack Overflow用户

发布于 2012-11-15 21:42:15

C++标准只规定long至少和int一样大,所以当它完全一样大的时候,在场景中没有什么犯罪:它是完全由实现定义的。在不同的平台上,大小可能很重要,例如,在我的Linux机器上,我的int大小为4,long大小为8。

票数 20
EN

Stack Overflow用户

发布于 2012-11-15 22:00:36

正如其他人所指出的那样,这个问题背后的假设只是部分正确的,也就是说,在某些平台上并不成立。如果你真的想了解我们是如何走到现在的境地的,J·马希的the Long Road to 64 Bits将给你一个很好的视角,了解各种力量的存在以及它们是如何相互作用的。

快速总结,C从char (8位)和int (16位)开始。然后添加了short (16位)和long (32位),而int可以是16位或32位,这取决于平台上的自然特性和向后兼容的压力。当64位出现时,long long被添加为64位类型,并且在64位平台上对较小的类型进行了一些调整。32位int稳定了下来,但long保持了各种定义,一些64位平台有64位long,而另一些(可能只有Windows?)将long保持为32位,可能是由于向后兼容性的不同压力(Unix长期以来一直将long假定为与指针相同的大小,当int为16位时,Windows中的残留更多,因此long是唯一的32位类型)。顺便说一句,添加typedefs (intXX_tintptr_t)是为了帮助使意图更清晰,但对于intXX_t家族来说,强制不变的大小是不真正需要的。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13398630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档