2.1.1 算术类型
【char(8位)可以存放机器基本字符集中任意字符对应的数字值。
wchar_t(16位)可以存放机器最大扩展字符集的所有字符。
char16_t和char32_t(16及32位)为Unicode字符集服务(用于表示所有自然语言中字符的标准)。】
【int、short、long、long long 前加unsigned 可以变为无符号类型,其中unsigned int 可以缩写为unsigned。
char 的表现形式同样有带符号的及不带符号的,编译器决定其具体表现为哪一种。】
【如何选择类型:
当明确知晓数值不可能为负时,选用无符号类型(增强代码的健壮性);
使用int 执行整数运算尺寸不足时,选用long long(在数值严格依赖int 的表示范围时,因为不同机器上int 的尺寸可能不同,此时程序成为不可移植的);
因为char 在不同的编译器中表现形式不同,尽量避免char 直接参与表达式的运算;
执行浮点数运算选用double,精度高于float 且计算代价与其相差无几。】
2.1.2 类型转换
【对字符赋整数值,当等号右侧没有用引号时,该整数值代表所存储字符在机器中的机器值。】
【表达式的结果与将其付给哪种类型的变量无关:
int a = 1, b = 3;
double c = a/b;
最终c 的值为0。】
【当为无符号类型赋值超出其表示范围时,结果是初始值对无符号类型表示范围取模后的余数。
当为带符号类型赋值超出其表示范围时,结果是未定义的。
当一个算数表达式中既有无符号数又有int 数时,那个int 值就会转换成无符号数;int 转换成无符号数的过程与直接把int 赋值给无符号变量相同。】
2.1.3 字面值常量
【十进制字面值的类型是有符号数变量中能容纳当前值的,尺寸最小的变量类型。
八进制和十六进制字面值的类型是有符号数和无符号数变量中能容纳当前值的,尺寸最小的变量类型。】
【字符串字面值的类型实际上是由常量字符构成的数组,编译器在每个字符串的末尾处添加一个空字符('\0')以示结束。
所以字符串字面值的长度要比实际内容多1。】
【不可打印的字符(换行符、空字符、制表符等)与有特殊含义的字符(反斜线、单双引号、问号等),程序员不能直接使用,必须使用转义序列。】
【通过给整形和浮点型字面值加后缀,或给字符和字符串字面值加前缀,可以指定字面值的类型。】