unsigned int的最大值是多少?

问题描述:

我写了一个程序,用unsigned int找到最后一个斐波那契数。这是1836311903,但我认为unsigned int的最大值是65535。发生什么了?unsigned int的最大值是多少?

while(true) 
    { 
     sequence[j] = sequence[j-1] + sequence[j-2]; 
     if(sequence[j-1]>sequence[j]) break; 
     j++; 
    } 

    printf("%d", sequence[j-2]); 
+1

除非你有2个字节的无符号'int's,在'最大数量的无符号int'绝对是大于65535. – wolfPack88 2014-10-08 19:56:22

+0

你如何“知道”最大的'unsigned int'是65535? – 2014-10-08 20:00:43

你错误地认为unsigned int的最大值是65535.对于大多数编译器来说,大多数编译器都没有这种情况,因为我们有16位处理器的时候可能早在windows 95以前。

该标准不定义任何整型的大小;他们只是定义了彼此之间的大小关系。 (long long> = long> = int> = short> = char ... etc)实际的大小虽然非常常见且一致,但是由编译器的实现来定义,因此通常是平台定义的。

不能承受大多数int使用处理器上一个单词的大小;今天通常是32位或64位。

您可以通过sizeof(int)来验证'为什么';然后提高2的权力减去1,你已经得到你的答案最大整数...

更好的办法是#include <limits.h>#include <climits>并使用它定义的值。 在C++中,您也可以使用std::numeric_limits<unsigned int>::max()

+0

在C++中,我们实际上会使用['std :: numeric_limits :: max()'](http://en.cppreference.com/w/cpp/types/numeric_limits/max)。 – 2014-10-08 19:59:38

+0

是的,我知道,因为我知道它更好,所以我选择了C标准。我将在 – UpAndAdam 2014-10-08 20:01:38

+0

中加入@sharth是一个C++ 11的东西吗? – UpAndAdam 2014-10-08 20:02:46

http://www.tutorialspoint.com/cprogramming/c_data_types.htm(以及许多其他地方)中所示,无符号整型可以是2个字节或4个字节。在你的情况下,你使用4个字节,所以最大值是4,294,967,295。

您提到的最大值,65535对应2个字节。

下面的代码会给您的系统上一个unsigned int的最大值:

#include <stdio.h> 

typedef unsigned int  ui; 

int main() 
{ 
    ui uimax = ~0; 

    printf("uimax %u\n",uimax); 

    return 0; 
} 

int型,只定义它们的大小不是他们的实际大小例如之间的关系

为unsigned long long int>的= unsigned long int类型> =无符号整型> =无符号短整型> =无符号字符

+1

使用其中一个内置设施来获得最大尺寸会更加清晰。 – 2015-11-30 00:09:56

+0

更清晰你的意思是更容易?它只是我不知道有多清晰我可以得到...对不起,我是这个论坛的东西noob ..... – user2419083 2015-11-30 00:22:24

+1

'std :: numeric_limits :: max()',虽然罗嗦,使价值的意图明确。 – 2015-11-30 00:57:27