2016-09-05 40 views
-5

所以我觉得我有点困惑。我正在搜索关于不同类型整数的限制的信息。我见过的unsigned long int类型的限制是4294967295,但是当我这样做:C++整数限制

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

我越来越:

18446744073709551615 

而且如果我没看错这个数字的极限无符号long long,不是吗?那么发生了什么? 谢谢

+1

“发生了什么?“你正在执行的代码给你你要求的结果,你应该检查文档 – ray

+1

基本类型的限制是依赖于实现的,这意味着它取决于你的编译器(或者编译器的人)实际的限制是(这可能取决于各种因素,包括代码要运行的硬件) – UnholySheep

+0

@UnholySheep好的,谢谢 – xampla

回答

2

我见过的unsigned long int类型的限制为4294967295

谁告诉你,这是错误的

unsigned long int限通常是上的量,类型是32位的系统。

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

这个数字是无符号long long的极限,isn'it?

同样,你正在做有关类型宽度假设。

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

如果你想使用的类型有固定的大小,然后those do exist

+0

我知道我错过了一些东西,谢谢。 – xampla

1

该标准仅定义了整数限制的下限。例如,unsigned long可表示的最大下限为4294967295

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

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

需要注意的是,编译器之间移动时,唯一的保证是“4294967295以上”。如果一个实现提供了更大的价值,那么不能保证另一个实现会实现。

在大多数情况下,标准其实两手空空约用来表示基本整型,像unsigned long实际的位数说。

18446744073709551615是具有64位unsigned long一致,在实践中。

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