我理解标准说long integer
的大小取决于实现,但我不确定原因。
所有需要做的就是能够存储-2147483647到2147483647或0到4294967295。
假设1个字节是8位,则永远不需要超过4个字节。那么说,只有当一个字节少于8位时,一个长整数才会超过4个字节,这是否安全?或者还有其他可能性吗?就像浪费空间的低效实施一样?
答案 0 :(得分:1)
额外的字节不是浪费空间。更大的范围非常有用。该标准规定了最小范围,而不是精确范围本身;拥有更广泛的类型并没有错。
当最初指定的标准int
应至少为16位时,通用处理器的寄存器不大于此值。代表long
需要两个寄存器和特殊操作!
但随后32位成为常态,现在int
到处都是32位,long
是64.现在大多数处理器都有64位指令,long
可以通常存储在一个寄存器中。
答案 1 :(得分:1)
你假设了很多东西:
CHAR_BIT
位宽PDP-10的字节范围为1到36位。 DEC VAX支持128位整数类型的操作。因此,有足够的理由超越标准规定。
标准模板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个字节的整数来实现双浮点数的基数排序(将浮点数作为整数然后用它做一些不值得描述的神奇事物。))。