当前位置: 技术问答>linux和unix
int 和longlong类型最大值,好郁闷的问题啊.
来源: 互联网 发布时间:2016-10-18
本文导语: 我今天测试了下,int 和 unsigned int,long long 和unsigned long long的最大值问题. 首先我们来认识下如何求最大值: int ->32位,最高位是正负位所以实际值只有31位,那它的最大值=2^31-1 = 2147483647. unsigned i...
我今天测试了下,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
#include
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=%dn",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的最大值到底是多少呢.
首先我们来认识下如何求最大值:
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
#include
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=%dn",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的最大值到底是多少呢.
|