C++整数限制
C++ integer limits
所以我觉得我有点困惑。我正在搜索有关不同类型整数的限制的信息。我已经看到 unsigned long int 的限制是 4294967295 但是当我这样做时:
cout << numeric_limits<unsigned long int>::max() << endl;
我得到:
18446744073709551615
如果我没记错的话,这个数字就是 unsigned long long 的限制,不是吗?那么发生了什么?
谢谢
I've seen that the limit for unsigned long int is 4294967295
谁告诉你的错了。
unsigned long int
的限制通常是在类型为 32 位的系统上。
但你的显然是 64 位的,所以你有不同的限制。
this number is the limit of unsigned long long, isn'it?
同样,您是在对字体宽度做出假设。
类型的宽度因 compilers/platforms 而异。
如果要使用固定大小的类型,则 those do exist。
该标准只定义了整数限制的下限。例如,unsigned long
可以表示的最大值的下限是 4294967295
.
std::numeric_limits<unsigned long>::max()
给出 unsigned long
可以表示的实现定义的最大值(即当前实现又名 compiler/linker/etc 实际支持的值)。
这意味着需要
std::numeric_limits<unsigned long>::max()
给出的值等于或大于 4294967295
。没有什么能阻止它给出更大的结果。但是,给出较小结果的实现不符合标准。
请注意,在编译器之间移动时,唯一的保证是“4294967295
或更多”。如果一个实现给出了更大的值,则不能保证另一个实现也会。
在大多数情况下,该标准实际上没有说明用于表示基本整数类型的实际位数,例如 unsigned long
。
值18446744073709551615
在实践中与64位unsigned long
一致。
其他整数类型(int
、char
、short
、long
等)的类似故事,尽管值不同。
所以我觉得我有点困惑。我正在搜索有关不同类型整数的限制的信息。我已经看到 unsigned long int 的限制是 4294967295 但是当我这样做时:
cout << numeric_limits<unsigned long int>::max() << endl;
我得到:
18446744073709551615
如果我没记错的话,这个数字就是 unsigned long long 的限制,不是吗?那么发生了什么? 谢谢
I've seen that the limit for unsigned long int is 4294967295
谁告诉你的错了。
unsigned long int
的限制通常是在类型为 32 位的系统上。
但你的显然是 64 位的,所以你有不同的限制。
this number is the limit of unsigned long long, isn'it?
同样,您是在对字体宽度做出假设。
类型的宽度因 compilers/platforms 而异。
如果要使用固定大小的类型,则 those do exist。
该标准只定义了整数限制的下限。例如,unsigned long
可以表示的最大值的下限是 4294967295
.
std::numeric_limits<unsigned long>::max()
给出 unsigned long
可以表示的实现定义的最大值(即当前实现又名 compiler/linker/etc 实际支持的值)。
这意味着需要
std::numeric_limits<unsigned long>::max()
给出的值等于或大于 4294967295
。没有什么能阻止它给出更大的结果。但是,给出较小结果的实现不符合标准。
请注意,在编译器之间移动时,唯一的保证是“4294967295
或更多”。如果一个实现给出了更大的值,则不能保证另一个实现也会。
在大多数情况下,该标准实际上没有说明用于表示基本整数类型的实际位数,例如 unsigned long
。
值18446744073709551615
在实践中与64位unsigned long
一致。
其他整数类型(int
、char
、short
、long
等)的类似故事,尽管值不同。