C++ 无符号整数的最大值?

C++ 无符号整数的最大值?,c++,unsigned,C++,Unsigned,我编写了一个程序,使用类型unsigned int查找最后一个斐波那契数。它是1836311903,但我认为无符号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
查找最后一个斐波那契数。它是
1836311903
,但我认为
无符号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可以是2字节或4字节。在本例中,您使用的是4个字节,因此最大值为4294967295


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

您错误地认为无符号整数的最大值是65535。也许从Windows95的早期开始,大多数编译器就不是这样了,当时我们有16位处理器

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

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

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

更好的方法是
#包含
#包含
并使用它定义的值。
C++
中,您也可以使用
std::numeric\u limits::max()

以下代码将为您的系统上的无符号整数提供最大值:

#include <stdio.h>

typedef unsigned int        ui;

int main()
{
    ui uimax = ~0;

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

    return 0;
}
#包括
typedef无符号int-ui;
int main()
{
ui-uimax=~0;
printf(“uimax%u\n”,uimax);
返回0;
}
Int类型只定义其大小之间的关系,而不定义其实际大小,例如


未签名长long int >未签名长int > =无符号int > =未签名char < /p>除非您有2字节<代码>未签名int S,代码中的最大值>未签名int >绝对大于65535。您如何知道“最大<代码>无符号int <代码>为65535?C++中我们实际上会使用。是的,我知道,我不符合C标准,因为我更了解它。我要补充一点in@sharth这是C++ 11的东西吗?不,它至少在1998以来是第一个C++标准。使用一个内置的设备可以得到最大的尺寸。更清楚的是,你说的更容易??只是我不知道我能弄清楚多少。。。很抱歉,我是这个论坛上的noob stuff…

std::numeric\u limits::max()
,虽然冗长,但它清楚地表明了该值的意图。