unsigned int的最大值?

时间:2014-10-08 19:54:05

标签: c++ math int unsigned

我编写了一个程序,使用类型unsigned int查找最后一个Fibonacci数。它是1836311903,但我认为unsigned int的最大值为65535。那是怎么回事?

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

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

3 个答案:

答案 0 :(得分:6)

你错误地认为unsigned int的最大数字是65535.对于大多数编译器来说情况并非如此,因为可能是在我们拥有16位处理器的Windows 95的早期阶段。

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

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

你可以验证为什么'自己采取sizeof(int);然后将2增加到该功率减1并且你得到了max int ...

的答案

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

答案 1 :(得分:3)

http://www.tutorialspoint.com/cprogramming/c_data_types.htm(以及许多其他地方)所示,unsigned int可以是2个字节或4个字节。在您的情况下,您使用4个字节,因此最大值为4,294,967,295。

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

答案 2 :(得分:1)

以下代码将为您提供系统上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&gt; = unsigned long int&gt; = unsigned int&gt; = unsigned short int&gt; = unsigned char