所以我觉得我有点困惑。我正在搜索有关不同类型整数的限制的信息。我已经看到 unsigned long int 的限制是 4294967295 但是当我这样做时:
cout << numeric_limits<unsigned long int>::max() << endl;
我越来越:
18446744073709551615
如果我没记错的话,这个数字是 unsigned long long 的极限,不是吗?那么发生了什么?谢谢
所以我觉得我有点困惑。我正在搜索有关不同类型整数的限制的信息。我已经看到 unsigned long int 的限制是 4294967295 但是当我这样做时:
cout << numeric_limits<unsigned long int>::max() << endl;
我越来越:
18446744073709551615
如果我没记错的话,这个数字是 unsigned long long 的极限,不是吗?那么发生了什么?谢谢
我已经看到 unsigned long int 的限制是 4294967295
谁告诉你那是错的。
的限制unsigned long int
通常是在类型为 32 位的系统上。
但是你的显然是 64 位的,所以你有不同的限制。
这个数字是 unsigned long long 的极限,不是吗?
同样,您正在对类型宽度做出假设。
类型的宽度因编译器/平台而异。
如果您想使用具有固定大小的类型,那么这些确实存在。
该标准仅定义整数限制的下限。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
对于其他整数类型( 、char
、short
、long
等) ,类似的故事,尽管具有不同的值。