为什么长整数在某些系统上占用超过4个字节?

时间:2012-05-27 02:40:32

标签: c++ long-integer

我理解标准说long integer的大小取决于实现,但我不确定原因。

所有需要做的就是能够存储-2147483647到2147483647或0到4294967295。

假设1个字节是8位,则永远不需要超过4个字节。那么说,只有当一个字节少于8位时,一个长整数才会超过4个字节,这是否安全?或者还有其他可能性吗?就像浪费空间的低效实施一样?

5 个答案:

答案 0 :(得分:1)

额外的字节不是浪费空间。更大的范围非常有用。该标准规定了最小范围,而不是精确范围本身;拥有更广泛的类型并没有错。

当最初指定的标准int应至少为16位时,通用处理器的寄存器不大于此值。代表long需要两个寄存器和特殊操作!

但随后32位成为常态,现在int到处都是32位,long是64.现在大多数处理器都有64位指令,long可以通常存储在一个寄存器中。

答案 1 :(得分:1)

你假设了很多东西:

  • 一个字节为CHAR_BIT位宽

PDP-10的字节范围为1到36位。 DEC VAX支持128位整数类型的操作。因此,有足够的理由超越标准规定。

  • 数据类型的限制在§3.9.1/ 8
  • 中给出
  

标准模板std :: numeric_limits(18.3)的特化   应指定每种算术类型的最大值和最小值   实施。

查找<limits>标题。

杰克·克莱恩的文章可能会引起你的兴趣!

答案 2 :(得分:1)

明显使用大于32位的long是为了获得更大的范围。

例如,在long long int(和公司)处于标准之前,DEC正在销售64位(Alpha)处理器和64位操作系统。他们建立了一个(符合要求)的系统:

char = 1 byte
short = 2 bytes
int = 4 bytes
long = 8 bytes

至于他们为什么这样做:好吧,一个明显的原因是他们的客户可以访问64位类型并利用他们的64位硬件。

答案 3 :(得分:0)

如果需要特定大小的整数,则需要使用指定大小的类型:

中int8_t int16_t int32_t 的int64_t int128_t ...

这些可以在一些随机头文件中找到(它取决于你正在使用的操作系统,尽管在C ++中似乎是&lt; stdint&gt;)

您在开头使用u(uint32_t)时有未签名的版本。

其他人已经回答了为什么这么大的原因。

请注意,最新的Intel处理器也支持256位数。多么浪费,嘿?! 8 - )

哦!而time_t也开始使用64位。在2068年,32位的time_t将变为负数,并在1800年末给你一个日期...这是一个很好的理由采用64位的东西。

答案 4 :(得分:0)

使用8字节整数的一个原因是能够处理超过4 GB的内存。 IE浏览器。 2 ^ 32 = 4千兆字节。 2 ^ 64 =嗯,这很多!

就个人而言,我已经使用了8个字节的整数来实现双浮点数的基数排序(将浮点数作为整数然后用它做一些不值得描述的神奇事物。))。

相关问题