C++ 数据类型总结
一、常用整型
类型 | 长度 | 取值范围 |
char | 1Byte | ( |
short (signed and unsigned) | 2Byte | ( |
int (signed and unsigned) | 4Byte | ( |
long (signed and unsigned) | 4Byte | ( |
long long (signed and unsigned) | 8Byte | ( |
char类型说明:char类型我们通常理解为字符型,其实其在内存中存放的是整型,只是当我们使用它的时候,编译器会将其翻译成ASCII字符集中对应的字符。
- wchar_t(宽字符类型):程序需要处理的字符集可能无法用一个8位的字节表示,对于这种情况,C++的处理方式有两种。首先如果大型字符集是实现的基本字符集,则编译器厂商可以将char定义为一个16位的字节或更长的字节。另一种类型wchar_t可以表示扩展字符集。由于cin和cout将输入和输出看作是char流,因此不适于用来处理wchar_t类型。iostream头文件的最新版本提供了作用相似的工具:wcin和wcout,用于处理wchar_t流。另外,可以通过加上前缀L来指示宽字符常量和宽字符串。
- char16_t:(unsigned)长16位,用u前缀表示char16_t常量,如u’C’和u"good";
- char32_t:(unsigned)长32位,用U前缀表示char32_t常量,如如U’C’和U"good";
可通过如下程序来查看各类型对应的长度:
//通过sizeof()函数来计算类型的长度。
//注意参数是类型时,必须使用括号;如果是变量名时,括号是可选的。
#include <iostream>
int main()
{
using namespace std;
cout << "char is: "<<sizeof(char) << endl;
cout << "short is: " << sizeof(short) << endl;
cout << "int is: " << sizeof(int) << endl;
cout << "long is: " << sizeof(long) << endl;
cout << "long long is: " << sizeof(long long) << endl;
}
运行结果如下:
二、浮点型
类型 | 长度 |
float | 4Byte |
double | 8Byte |
long double | 8Byte |
可通过如下程序来查看各类型对应的长度:
#include <iostream>
int main()
{
using namespace std;
cout << "float is: "<<sizeof(float) << endl;
cout << "double is: " << sizeof(double) << endl;
cout << "long double is: " << sizeof(long double) << endl;
}
运行结果如下:
三、布尔型
布尔型为bool
,只有两种取值,true 或 false,非0为true,0为false;
四、复合数据类型
4.1、数组(Array)
数组(Array)是一种数据格式,能够存储多个同类型的值
数组声明:int month[12]
,创建一个int型的数组,该数组可以存12个int型的值
数组初始化:
- int card[4] = {3,6,8,10};
- int hand[4] = {4}; 为hand[0]赋值为4,其余默认为0;
- int coub[] = {1,2,3,4,5}; 数组coub没有指定大小,其大小为赋值列表的个数
注意:
- 数组的下标从0开始;
- 数组名是指针,是第一个元素的地址,即Array[0],因此数组访问时*(Arr + i) = Arr[i];
4.2、字符串
1、C-风格字符串(存储在一个char数组中)
定义:char dog[8] = {‘b’,‘e’,‘a’,‘u’,‘x’,’ ',‘I’,‘I’}; 不是字符串
char dog[8] = {‘f’,‘a’,‘t’,‘e’,‘s’,‘s’,‘a’,’\0’}; 是字符串
2、string类型字符串
string类,使用时要导入头文件#include<string>
字符串拼接:string = string1 + string2
4.3、结构体(Struct)
结构可以将多种不同类型糅合到一起形成一种新的数据类型
struct student{
long ID;
string name;
}
结构体使用:C++中可以省略struct,但是C中不可以省略
student s; s.name; 使用成员运算符访问内部成员
student *s; s->name; 如果定义的指针,必须使用指针成员运算符
初始化:可以逐个输入进行初始化,也可以使用值列表,例如student s = {1001,“张三”};
4.4、共用体(union)
共用体是一种数据格式,它能够存储不同的数据类型,但只能同时存储其中的一种类型。
定义如下:
union one4all{
int int_val;
long long_val;
double double_val;
}
one4all pail;
pail.int_val = 15; //此时存储一个int值
pail.double_val = 1.38; //此时存储一个double值
4.5、枚举(enum)
enum spectrum {red,orange,yellow,green,blue,violet,indigo,ultraviolet};
这条语句完成了两项工作:
- 让spectrum 成为了新类型的名称,spectrum 被称为枚举;
- 将red,orange,yellow等作为符号常量,它们对应的整数值0~7。这些常量叫做枚举量,只能将枚举量赋值给枚举类型的变量。
注意:
- 设置枚举量的值:enum bits {one = 1,two = 2,four = 4,eight = 8};
指定的值必须是整数,也可以只显式地定义其中一些枚举量的值:
enum bigstep {first,second = 100,third};
first在默认情况下为0,后面没被初始化的枚举量的值将比起前面的枚举量大1,所以third的值为101 - 枚举的取值范围:取值范围的定义,首先,要找出上限,先找出最大值,再找到大于这个最大值、最小的2次幂,将它减1,便得到取值范围的上限;例如最大的枚举值为101,按照定义它的上限为127。其次,要找出下限,需要找出最小值,如果最小值不小于0,则取值范围的下限为0;否则,采用寻找上限方式相同的方式,但加上负号;例如最小值为-6,而比它小的、最大的2的幂是-8,因此下限为-7。