日期:2014-05-16  浏览次数:21137 次

int 和longlong类型最大值,好郁闷的问题啊.
我今天测试了下,int 和 unsigned int,long long 和unsigned long long的最大值问题.
首先我们来认识下如何求最大值:
int ->32位,最高位是正负位所以实际值只有31位,那它的最大值=2^31-1 = 2147483647.
unsigned int ->2^32 -1 = 4294967295
long long ->2^63 -1 = 92233720368547758007
unsigned long long ->2^64-1=18446744073709551615

那么我们现在用程序来测试下:
#include <stdio.h>
#include <stdlib.h>

typedef long long INT64;
typedef unsigned long long INT64U;
typedef int INT32;
typedef unsigned int INT32U;

int main(int argc, char* argv[])
{
INT32 it1 = 2147483647; //2^31-1
INT64 it2 = 92233720368547758007; //2^63-1
INT32U it3= 4294967295; //2^32-1
INT64U it4= 18446744073709551615; //2^64-1
printf("it1=%d,it2=%d,it3=%d,it4=%d\n",sizeof(it1),sizeof(it2),sizeof(it3),sizeof(it4));
printf("it1=%d,it2=%lld,it3=%d,it4=%lld \n",it1,it2,it3,it4);
return 0;
}

但是在it2,it3,it4编译器都给出了同样的警告:
warning: this decimal constant is unsigned only in ISO C90
warning: integer constant is too large for "long" type
只有it1才算正常.

实际输出是:
it1=4,it2=8,it3=4,it4=8
it1=2147483647,it2=-73,it3=-1,it4=-1 

输出也不正常,都说明是越位了,但是我这都是最大值,为什么会产生这样的情况,那这些it2,it3,it4的最大值到底是多少呢.

------解决方案--------------------
http://blog.csdn.net/nineforever/archive/2009/02/03/3860992.aspx
http://blog.csdn.net/lychee007/archive/2010/04/04/5449237.aspx
http://blog.csdn.net/wangyadong/archive/2009/05/22/4208013.aspx