g++环境中:
int 占4个字节,也就是32位
所以有符号int 的最大值是2^31-1=2147483647
无符号int 的最大值是2^32-1=4294967295
unsigned == unsigned int
#include<iostream>
#include<cmath>
using namespace std;
int main(){
//cout<<sizeof(unsigned)<<endl;
int i = pow(2,31)-1 ;
cout<<"2^31-1="i<<endl;
unsigned int ui = pow(2,32)-1 ;
cout<<"2^32-1="ui<<endl;
return 0;
}
经过测试发现在g++中,int64 == long == long long,都是占8个字节
8个字节,共8*8=64位,所以按理来说对于
有符号long 最大值应该是2^63-1=9223372036854775807
无符号long 最大值应该是2^64-1=18446744073709551615
但是写到代码里却发现有问题啊
#include<iostream>
#include<cmath>
using namespace std;
int main(){
for(unsigned i =30;i<65;i++)
{
unsigned long r = pow(2,i)-1 ;
cout<<"2 ^ "<<i<<" = "<<r<<endl;
}
return 0;
}
输出:
2 ^ 44 = 17592186044415
2 ^ 45 = 35184372088831
2 ^ 46 = 70368744177663
2 ^ 47 = 140737488355327
2 ^ 48 = 281474976710655
2 ^ 49 = 562949953421311
2 ^ 50 = 1125899906842623
2 ^ 51 = 2251799813685247
2 ^ 52 = 4503599627370495
2 ^ 53 = 9007199254740991
2 ^ 54 = 18014398509481984
2