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

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

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

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

EN

回答 5

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用户

发布于 2012-11-15 21:39:43

不,在某些平台上只有4个字节。C++标准将大小保留为实现定义。

在其他平台上,它可能是不同的大小。

票数 3
EN

Stack Overflow用户

发布于 2012-11-15 21:44:52

它不一定要更大。例如,当我在我的机器上使用时,通常会将long定义为8个字节,这就是GCC的方式。该标准的措辞通常要求这些类型“至少需要X大小”(例如,请查看finally-standardized long long in C++11

本质上,只要满足要求,任何人都可以自由地做他们想做的事情。根据标准,有人可以使long long的256位,这将是完全合法的。

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

https://stackoverflow.com/questions/13398630

复制
相关文章

相似问题

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