
2.1 基本内置类型
- 基本数据类型:算术类型(arithmetic type)和空类型(void)。
- 算术类型包含字符、整形数、布尔值、和浮点数。
2.1.1 算术类型
- 算术类型分为两类:整形(integral type,包括字符和布尔类型在内)和浮点型。
- C++ 算术类型:

- 除字符和布尔类型之外,其他整型用于表示(可能)不同尺寸的整数。C++语言规定一个 int 至少和一个 short 一样大,一个 long 至少和一个 int 一样大,一个 long long 至少和一个 long 一样大。其中,数据类型 long long 是在 C++11 中新定义的。
- 为了赋予内存中某个地址明确的含义,必须首先知道存储在该地址的数据的类型。类型决定了数据所占的比特数以及该如何解释这些比特的内容。

- 通常,float 以一个字(32比特)来表示,double 以 2 个字(64比特)来表示。一般来说,类型 float 和 double 分别有 7 和 16 个有效位。
- 除去布尔型和扩展的字符型之外,其他整型可以划分为带符号的(signed)和无符号的(unsigned)两种。带符号类型可以表示正数、负数或0,无符号类型仅能表示大于等于 0 的值。
- 如何选择类型:

2.1.2 类型转换
- 类型所能表示的值的范围决定了转换的过程:

- 切勿混用带符号类型和无符号类型。如果表达式里既有带符号类型又有无符号类型,当带符号类型取值为负时会出现异常结果,这是因为带符号数会自动地转换成无符号数。例如,在一个形如
a*b的式子中,如果a = -1, b = 1,而且 a 和 b 都是 int,则表达式的值显然为 -1。然而,如果 a 是 int,而 b 是 unsigned,则结果须视在当前机器上 int 所占位数而定。在我们的环境里,结果是 4294967295。
2.1.3 字面值常量
- 我们可以将整型字面值写作十进制数、八进制数或十六进制数的形式。以 0 开头的整数代表八进制数,以 0x 或 0X 开头的代表十六进制数。
- 整型字面值具体的数据类型由它的值和符号决定。默认情况下,十进制字面值是带符号数,八进制和十六进制字面值既可能是带符号的也可能是无符号的。十进制字面值的类型是 int、long 和 long long 中尺寸最小的那个(例如,三者当中最小的是 int),当然前提是这种类型要能容纳下当前的值。
- 尽管整型字面值可以存储在带符号数据类型中,但严格来说,十进制字面值不会是负数。如果我们使用了一个形如 -42 的负十进制字面值,那个负号并不在字面值之内,它的作用仅仅是对字面值取负值而已。
- 默认的,浮点型字面值是一个 double。
- 由单引号括起来的一个字符称为 char 型字面值,双引号括起来的零个或多个字符则构成字符串字面值。
- 编译器在每个字符串的结尾处添加一个空字符('0'),因此,字符串字面值的实际长度要比它的内容多 1。
- 如果两个字符串字面值位置紧邻且仅由空格、缩进和换行符分隔,则它们实际上是一个整体。当书写的字符串字面值比较长,写在一行里不太合适时,就可以采取分开书写的方式:
// 分多行书写的字符串字面值
std::cout<<"a really, really long string literal"
"that spans two lines"<<std::endl;
- C++ 语言规定的转义序列包括:
换行符 n 横向制表符 t 报警(响铃)符 a
纵向制表符 v 退格符 b 双引号 "
反斜线 问号 ? 单引号 '
回车符 r 进纸符 f
- 指定字面值的类型

















