### 数据类型

数据类型描述了对象在内存存储区中占据的空间大小，描述了对象能够表示的数据范围和类型。C++语言中常用的数据类型有整型、实型、字符型（这 3 种类型也被称之为简单数据类型）、数组类型、布尔类型、枚举类型、结构体类型、公用体类型、指针类型、引用类型等。

### 简单数据类型

简单数据类型主要指整型、实型和字符类型。其中，整型按符号划分，可以分为有符号整型和无符号整型两大类，从长度划分，可以分为普通整型、短整型和长整型 3 类，如表 1 所示。

表 1 整数类型

类型 | 名称 | 字节数 | 范围
[signed] int | 有符号整型 | 4 | -2147483648~2147483647
Unsigned [int] | 无符号整型 | 4 | 0~4294967295
[signed]short | 有符号短整型 | 2 | -32768~32767
Unsigned short [int] | 无符号短整型 | 2 | 0~65535
[signed] long [int] | 有符号长整型 | 4 | -2147483648~2147483647
Unsigned long [int] | 无符号长整型 | 4 | 0~4294967295

注意：表格中的[]为可选部分。例如“[signed] long [int]”，可以简写为“long”。

实型主要包括单精度型、双精度型和长双精度型，如表 2 所示。

表 2 实数类型

类型 | 名称 | 字节数 | 范围
float | 单精度型 | 4 | 1.2e-38~3.4e38
double | 双精度型 | 8 | 2.2e-308~1.8e308
long double | 长双精度型 | 8 | 2.2e-308~1.8e308

在程序中使用实型数据时需要注意一下几点：

q 实数的相加

实型数据的有效数字是有限制的，利用单精度 float 的有效数字是 6~7 位，如果将数字“86041238.78”赋值给 float 类型，显示的数字可能是“86041240.00”，个位数“8”被四舍五入，小数位被忽略。如果将“86041238.78”与“5”相加，输出的结果为“86041245.00”，而不是“86041243.78”。

q 实数与零的比较

在开发程序的过程中，经常会进行两个实数的比较。但是，在进行实数的比较时，尽量不要使用“==”或“!=”运算符，而使用“>=”或“<=”之类的运算符，这是许多程序开发人员经常犯的错误。例如：

float fvar = 0.00001;

if (fvar == 0.0)

……

上述的代码并不是高质量的代码。如果程序要求的精度非常高，可能会产生未知的结果。通常，在比较实数时需要定义实数的精度。例如：

void main()

{

float feps = 0.0000001; //定义 0 的精度

float fvar = 0.00001;

if (fvar >= -feps && fvar <=feps)

printf("等于零!\n",fvar);

else

printf("不等于零!\n",10);

}

在程序中有时会出现一些文字常量。例如“365”、“0.25”等。对于整数类型的文字常量，可以有 3 种进制表示方式。即十进制表示、八进制表示和十六进制表示，默认为十进制表示。例如：

365 //十进制表示

0365 //八进制表示

0x365 //十六进制表示

在十进制数前加数字零（0），即表示八进制数，在十进制数前加 0x 表示十六进制数。

默认情况下程序中出现的整数文字常量，其类型为有符号整数，即 int 类型。如果我们在整型文字常量的末尾添加“L”或“l”（L 的大写字母或小写字母形式），则表示 long 整数类型。如果在整数文字常量的的末尾添加“U”或“u”（U 的大写字母或小写字母形式），则表示无符号整数。例如：

365L //long 类型

365U //无符号整数

365UL //无符号长整数

365LU //同 365UL，无符号长整数

在上面的举例中没有使用小写字母“l”和“u”，由于小写字母“l”与数字“1”比较详细，为了防止产生混淆，都使用了大写字母。建议用户在编写代码时也采用大写字母形式，防止他人产生误解。

程序中实型文字常量默认为 double，即双精度实型，如果将其修改为 float 类型，可以在结尾添加“F”或“f”（F 的大写字母和小写字母形式）。

在 C++语言中，字符类型数据是使用单引号括起来的形式表示的。例如：

'a' 'A' 'b' 'c'

定义字符类型数据可以使用 char 关键字。例如，下面的语句定义了一个字符变量。

char chData = 'N'; //定义字符变量

在计算机中字符是以 ASCII 码的形式存储的，因此，可以直接将整数赋值给字符变量。例如：

char ch = 97;

printf("%c\n",ch);

输出结果为“a”，因为 97 对应的 ASCII 码为“a”。