0

我知道标准说 a 的大小long integer取决于实现,但我不知道为什么。

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

假设 1 个字节是 8 位,那么这永远不需要超过 4 个字节。那么,是否可以肯定地说,只有一个字节少于 8 位时,一个长整数才会占用超过 4 个字节?或者还有其他可能吗?就像效率低下的实现浪费空间一样?

4

5 回答 5

2

大于 32 位的一个明显用途long是提供更大的可用范围。

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

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

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

于 2012-05-27T02:45:53.593 回答
1

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

当标准最初规定 anint至少应为 16 位时,普通处理器的寄存器不会大于该值。代表一个long拿了两个寄存器和特殊操作!

但后来 32 位成为标准,现在ints 到处都是 32 位,longs 是 64。现在大多数处理器都有 64 位指令,并且 along通常可以存储在单个寄存器中。

于 2012-05-27T02:45:16.640 回答
1

你假设了很多事情:

  • 一个字节是CHAR_BIT位宽

PDP-10 的字节范围为 1 到 36 位。DEC VAX 支持对 128 位整数类型的操作。因此,有充分的理由超越标准的要求。

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

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

查找<limits>标题。

您可能会对 Jack Klein 的这篇文章感兴趣!

于 2012-05-27T02:45:36.463 回答
0

如果您想要一个特定大小的整数,那么您想要使用具有指定大小的类型:

int8_t int16_t int32_t int64_t int128_t ...

这些在一些随机头文件中可用(它取决于您使用的操作系统,尽管在 C++ 中它似乎是 <stdint>)

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

其他人已经回答了为什么大小会这样那样。

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

哦!time_t 也开始使用 64 位。在 2068 年,32 位的 time_t 将变为负数,并为您提供 1800 年末的日期......这是在一些事情上采用 64 位的一个很好的理由。

于 2012-05-27T04:01:47.533 回答
0

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

就个人而言,我使用 8 字节整数在双浮点数上实现基数排序(将浮点数转换为整数,然后用它做一些不值得在这里描述的神奇事情。:))

于 2013-05-11T19:18:26.683 回答