所以我觉得我有点困惑。我正在搜索有关不同类型整数限制的信息。我已经看到unsigned long int的限制是4294967295,但是当我这样做时:
cout << numeric_limits<unsigned long int>::max() << endl;
我得到了:
18446744073709551615
如果我没错,这个号码是无符号长号的限制,不是吗?那么发生了什么? 谢谢
答案 0 :(得分:2)
我已经看到unsigned long int的限制是4294967295
谁告诉你错误。
dif/2
的限制通常是在类型为32位的系统上。
但你的显然是64位,所以你有不同的限制。
这个数字是无符号长long的限制,不是吗?
同样,您正在对类型宽度做出假设。
类型的宽度因编译器/平台而异。
如果您想使用固定大小的类型,请those do exist。
答案 1 :(得分:1)
标准仅定义整数限制的下限。例如,unsigned long
可以表示的最大值的下限是4294967295
。
std::numeric_limits<unsigned long>::max()
给出unsigned long
可以表示的实现定义的最大值(即当前实现,即编译器/链接器/等实际支持的内容)。
这意味着它是必需的
std::numeric_limits<unsigned long>::max()
提供的值为4294967295
或更高。没有什么可以阻止它给出更大的结果。但是,提供较小结果的实现不符合标准。
请注意,在编译器之间移动时,唯一的保证是&#34; 4294967295
或更多&#34;。如果一个实现提供更大的值,则无法保证另一个实现将会。
在大多数情况下,标准实际上没有说明用于表示基本整数类型的实际位数,例如unsigned long
。
在实践中,值18446744073709551615
与64位unsigned long
一致。
类似的故事,尽管有不同的值,但对于其他整数类型(int
,char
,short
,long
等)。