您的位置:首页 > 编程语言 > C语言/C++

C++整型(short,int,long,longlong)

2020-06-30 16:08 78 查看

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类型的长度会增加一倍,这边导致内存占用增大。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: