[英]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.