繁体   English   中英

无符号整数的最大值?

[英]Maximum value for unsigned int?

我编写了一个程序来使用unsigned int类型查找最后一个斐波那契数。 它是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]);

您错误地认为 unsigned int 的最大数量是 65535。自从 Windows 95 早期我们使用 16 位处理器以来,大多数编译器都不是这种情况。

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

尽管大多数 int 使用处理器上的单词大小; 今天通常是 32 位或 64 位。

您可以通过获取 sizeof(int); 来验证“为什么”自己。 然后将 2 乘以该幂减去 1,您就得到了 max int 的答案...

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

http://www.tutorialspoint.com/cprogramming/c_data_types.htm (以及许多其他地方)所示,unsigned int 可以是 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 >= unsigned int >= unsigned short int >= unsigned char

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM