包括Microsoft在内的许多来源都将int和long类型引用为4字节,并且具有(signed) -2,147,483,648到2,147,483,647的范围。如果long原语类型实际上没有提供更大范围的值,那么它有什么意义呢?
发布于 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_t
,intptr_t
)是为了帮助使意图更清晰,但对于intXX_t
家族来说,强制不变的大小是不真正需要的。
发布于 2012-11-15 21:39:43
不,在某些平台上只有4个字节。C++标准将大小保留为实现定义。
在其他平台上,它可能是不同的大小。
发布于 2012-11-15 21:44:52
它不一定要更大。例如,当我在我的机器上使用时,通常会将long
定义为8个字节,这就是GCC的方式。该标准的措辞通常要求这些类型“至少需要X大小”(例如,请查看finally-standardized long long
in C++11。
本质上,只要满足要求,任何人都可以自由地做他们想做的事情。根据标准,有人可以使long long
的256位,这将是完全合法的。
https://stackoverflow.com/questions/13398630
复制相似问题