-5

所以我觉得我有点困惑。我正在搜索有关不同类型整数的限制的信息。我已经看到 unsigned long int 的限制是 4294967295 但是当我这样做时:

cout << numeric_limits<unsigned long int>::max() << endl;

我越来越:

18446744073709551615

如果我没记错的话,这个数字是 unsigned long long 的极限,不是吗?那么发生了什么?谢谢

4

2 回答 2

2

我已经看到 unsigned long int 的限制是 4294967295

谁告诉你那是的。

的限制unsigned long int通常是在类型为 32 位的系统上。

但是你的显然是 64 位的,所以你有不同的限制。

这个数字是 unsigned long long 的极限,不是吗?

同样,您正在对类型宽度做出假设。

类型的宽度因编译器/平台而异。

如果您想使用具有固定大小的类型,那么这些确实存在

于 2016-09-05T21:09:13.490 回答
1

该标准仅定义整数限制的下限。unsigned long例如,一个可以表示的最大值的下限是4294967295

std::numeric_limits<unsigned long>::max()给出实现定义的最大值 anunsigned long可以表示(即当前实现又名编译器/链接器/等实际支持的值)。

这意味着它需要 std::numeric_limits<unsigned long>::max()给出一个4294967295或更多的值。没有什么可以阻止它给出更大的结果。但是,给出较小结果的实现不符合标准。

请注意,在编译器之间移动时,唯一的保证是“4294967295或更多”。如果一个实现给出更大的值,则不能保证另一个实现会。

在大多数情况下,该标准实际上并没有说明用于表示基本整数类型的实际位数,例如unsigned long.

实际上,该值18446744073709551615与 64-bit 一致unsigned long

int对于其他整数类型( 、charshortlong等) ,类似的故事,尽管具有不同的值。

于 2016-09-05T22:08:40.463 回答