C ++整数限制

时间:2016-09-05 20:48:59

标签: c++ integer numeric-limits

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

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

我得到了:

18446744073709551615

如果我没错,这个号码是无符号长号的限制,不是吗?那么发生了什么? 谢谢

2 个答案:

答案 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一致。

类似的故事,尽管有不同的值,但对于其他整数类型(intcharshortlong等)。