我编写了一个程序,使用类型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]);
答案 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