C++整型(short,int,long,longlong)
C++整型数据类型
整型就是没有小数部分的。C++基本整型有char,short,int,long,long long。由于char 类型比较特殊,下面只关于char,int,long,long long。
1.整型short,int,long,long long
C++/C中的整型数据通过使用不同数目的位来存储值,最多能够表示4中不同的整数宽度。而且C++提供一种灵活的标准,它确保了最小长度吗(从C语言借鉴而来)
·short至少16位
·int至少16位,且至少和short一样长
·long至少32位,且至少和int一样长
·long long 至少64位,且至少和long一样长
首先
1.通常,在老式的IBM PC中int为16位的,在Windows XP,Windows Vista,Windows 7等多数计算机中为32位,也就是4字节
2.还有就是整型数据长度和操作系统和编译器的位数有关,例如int在16位操作系统中占2字节,在32和64位中占4字节
3.上述除了int 外,其他数据皆在后面是省略了int
4.上述整型数据类型都有一种不能存储负值的无符号变体(unsigned),其优点是增大了变量能够存储的绝对值上限。例如:short int表示的范围为-32768-32767,而unsigned short int 表示的范围为0-65535.
下面为64位操作系统中整型类型所占大小
类型 | 所占字节数 | 表示范围 |
---|---|---|
short int | 2 | -32,768 ~ 32,767 |
unsigned short int | 2 | 0 ~ 65,535 |
int | 4 | -2,147,483,648 ~ 2,147,483,647 |
unsigned int | 4 | 0 ~ 4,294,967,295 |
long int | 4 | -2,147,483,648 ~ 2,147,483,647 |
unsigned long int | 4 | 0 ~ 4,294,967,295 |
long long in | 8 | -92233372036854775808 ~ 922333720368547758087 |
unsigned long long int | 8 | 0 to 18,446,744,073,709,551,615 |
//打印整型占位大小和其表示数值的上下限 #include <iostream> #include <climits> int main() { using namespace std; int n_int = INT_MAX; short n_short = SHRT_MAX; long n_long = LONG_MAX; long long n_llong = LLONG_MAX; cout<<"int is "<<sizeof (int)<<endl; cout<<"short is "<<sizeof(short int)<<endl; cout<<"long is "<<sizeof(long int)<<endl; cout<<"long long int"<<sizeof(long logn int)<<endl; cout<<"max values:"<<endl; cout<<"int: "<<n_int <<endl; cout<<"short: "<<n_short <<endl; cout<<"long : "<<n_long <<endl; cout<<"long long : "<<n_llong <<endl; cout<<"min values:"<<endl; cout<<"int: "<<INT_MIN<<endl; }
位与字节
计算机内存中的基本单元是位(bit),可以将为看做是电子开关,他有8个开关进行组合,共有2^8个,即256种组合。因此,8位可以表示0-255或者-128-127。同理,16位单元可以表示35536不同的值。
字节(byte)通常是指8位的内存单元,他是描述计算机内存量的度量单位。
limits头文件
头文件limits定义了符号常量,用于表示类型的限制。例如:INT_MAX即int类型的能存储的最大数值。
符号常量 | 表示 |
---|---|
CHAR_BIT | char的位数 |
CHAR_MIN | char的最小值 |
CHAR_MAX | char的最大值 |
SCHAR_MAX | signed char的最大值 |
SCHAR_MIN | signed char的最小值 |
UCHAR_MAX | unsigned char的最大值 |
SHRT_MIN | short的最小值 |
SHRT_MAX | short的最大值 |
USHRT_MAX | unsigned char的最大值 |
INT_MIN | int的最小值 |
INT_MAX | int的最大值 |
UMIN_MAX | unsigned int 的最大值 |
LONG_MIN | long int的最小值 |
LONG_MAX | long int的最大值 |
ULONG_MAX | unsigned long的最大值 |
LLONG_MIN | llonglong int的最小值 |
LLOMG_MAX | longlong int的最大值 |
ULLONG_MAX | unsigned longlong int的最大值 |
典型整型溢出行为
如上图所示,若将一个short类型变量设置为最大值32767,再 加1的话,会变成-32768.若将一个unsigned short类型变量设置为0,再-1,会变成65535.这就是不同数据类型在数据溢出时,产生的变化,有他的重置点,也是溢出点。
选择整型的类型
根据具体变量数据可能用到的最大值和最小值,在选择数据类型,以达到节约空间,避免程序由于不同系统对于统一数据类型的长度判断有差异,而导致程序无法正常使用。
1.如果变量表示的值不能为负,如文档中的字数,人的数量,则可以使用无符号整型,这样可以表示更大的数值。
2.如果知道变量可能表示的整数值大于16位整数的最大值,则使用long。你看认为在这个系统上int是32位的,可以使用。但是,如果我将程序移植到16位系统上的时候,他就不会正常工作了,因为他的数值超过了该系统上判断int长度的16位。
3.要节省内存的话,且数值小于16位表达的最大值,则应使用short而不是int。你可能会说,我这系统上short和int所占长度一样。但是,如果我把程序从int为16位的系统移植到int为32位的系统上时,则int类型的长度会增加一倍,这边导致内存占用增大。
- C/C++/JAVA中short,int,long等整型表示范围的比较
- java整型byte,short,int,long取值范围大小
- C/C++之char,short ,long,double,float,int, signed, unsigned
- c++ int 、long int、long long、short int取值范围
- C++中数据类型int, short, long, long long的数据范围
- C++ bool,char,short,int,long,float,double数据类型大小以及数据溢出值求解
- java整型byte,short,int,long取值范围大小
- java整型byte,short,int,long取值范围大小
- java整型byte,short,int,long取值范围大小
- c/c++ bytes与int,short,long,float,double相互转换
- C/C++——求下面数据类型的最大值和最小值: char, short, int, long, float, double, long double和numeric_limits使用
- (二十四)整型short,int,long,long long
- C/C++: short , int , long , long long数据类型选用
- C++ sizeof short int long
- 整型数据范围总结(int,short,long等)
- 有关C++的数据类型(int,long,short,float,double等等)
- c语言基本数据类型short、int、long、char、float、double
- printf中的short int, int, long int和long long int
- java中byte数组与int,long,short间的转换
- [c++]数据类型之间的转换(string与基本类型int,float,double,long long等)