由于考研的编程题很多都需要使用C++语言来写,所以虽然我不太喜欢C++这门语言,那么还是得来看看。
算术类型
需要提前说明,C++语言属于比较低级的语言,所以没有规定数据类型的具体大小,所有数据类型都可能由于机器不同而产生差异。标准只规定了这些数据类型的最小范围,这一点我们在使用C++的时候也要注意。
整型
整型数据类型和它们的大小总结在下表:
数据类型 | 含义 | 最小单位 |
---|---|---|
bool | 布尔类型 | 未定义 |
char | 字符类型 | 1字节 |
wchar_t | 宽字符类型 | 2字节 |
char16_t | Unicode字符类型 | 2字节 |
char32_t | Unicode字符类型 | 4字节 |
short | 短整型 | 2字节 |
int | 整型 | 2字节 |
long | 长整型 | 4字节 |
long long | 长整型 | 8字节 |
wchar_t、char16_t和char32_t 是扩展字符类型,第一个用于宽字符,后两者用于Unicode字符集。
浮点型
浮点型数据类型和它们的大小总结在下表:
数据类型 | 含义 | 最小单位 |
---|---|---|
float | 单精度浮点类型 | 6位有效数字 |
double | 双精度类型 | 10位有效数字 |
long double | 扩展精度类型 | 10位有效数字 |
带符号的类型
在前面介绍的整型类型中,除了布尔类型和扩展的字符类型之外,其他整型都可以是有符号的(signed)和无符号的(unsigned),它们的区别在于取值范围。假如一个有符号变量的取值范围是-128到127,那么相应的无符号数取值范围就是0到255。默认情况下,类型是有符号类型,如果需要无符号类型需要显式指定。
在进行运算的时候,有符号数会被转换为无符号数进行运算,在这个过程中运算结果可能意外改变。所以为了稳妥起见,不要将有符号数和无符号数混合进行计算。
字面量
直接写在程序中的值称为字面量。由于数据类型有不同类型,所以字面量相应的也有不同的类型。
整型字面量
整型字面值可以有十进制、八进制和十六进制的形式。默认的数字就是十进制的,例如100;如果数字以0开头,那么就是八进制的数,例如024;如果数字以0x或0X开头,那么就是16进制的,例如0xcafe。
后缀 | 含义 | 例子 |
---|---|---|
u或U | 无符号数 | 1000U |
l或L | long类型 | 1000L,由于小写可能引起混淆,所以最好使用大写L |
ll或LL | long long类型 | 1000LL,最好采用大写形式 |
浮点型字面值
浮点数字面值可以有小数和科学计数法两种形式 ,以下都是有效的浮点型字面值。
3.14 0.4 .4 1e10 0.
浮点型字面值的后缀情况见下表。
后缀 | 含义 | 例子 |
---|---|---|
f或F | 单精度浮点数 | 0.4F |
l或L | long double类型 | 10.00L,最好使用大写L |
无后缀 | 双精度浮点数 | 3.14 |
字符和字符串字面值
由单引号包括的单个字符是字符字面量,例如'c'
。
由双引号包括的一串字符是字符串字面量,例如"abc"
,需要注意在C++中,字符串字面量会由编译器隐式添加一个\0
字符,以兼容C语言。所以"abc"
这个字符串的长度其实是4。这一点需要注意。
如果两个字符串字面量仅由空格分隔,那么这两个字符串实际上是相连的。
char long_string[] = "This is a long line "
"and next line";
字符和字符串字面量也有一些前缀,总结如下。
前缀 | 含义 | 例子 |
---|---|---|
u | char16_t类型 | u'c' |
U | char32_t类型 | U'c' |
L | 宽字符 | L'c' |
u8 | UTF-8字符串,仅能用于字符串字面量 | 3.14 |
布尔值字面量
布尔值字面量只有true
和false
两个。