第二章 变量和变量类型
1. C++ 算数类型
bool 布尔 最小尺寸未定义
char 字符 8位
wchar_t 宽字符 16位
char16_t Unicode 字符 16位
char32_t Unicode 字符 32位
short 短整型 16位
int 整型 16位
long 长整型 32位
long long 长整型 64位
float 单精度浮点型 6位有效数字
double 双精度浮点型 10位有效数字
long double 扩展精度浮点数 10位有效数字
如何选择类型
- 明知数值不可能为负的时候,选用无符号类型。unsigned
- 使用 int 执行整数运算。在实际应用中,short 常常太小而long一般和int有一样的尺寸。如果数值超过了int的表示范围,选用long long。
- 在算数表达式中不要使用char 和bool,只有在存放字符或布尔值的时候才能使用它们。因为char在一些机器上是有符号的,而在另一些机器上又是无符号的。
- 浮点数运算选用double。
2. 类型转换
- 当我们把一个非布尔类型的算数值赋给布尔类型时,初始值为0则结果位false,否则结果为true。
- 当我们把一个布尔值赋给非布尔类型时,初始值为false则结果为0,初始值为true 则结果为1.
- 浮点数赋给整数类型时,进行近似处理。结果值仅保留浮点数中小数点之前的部分。不会四舍五入。
- 把整数赋给浮点类型时,小数部分记为0。如果整数所占空间超过浮点类型的容量,精度可能损失。
尽管我们不会故意给无符号的对象赋值一个负值,却可能写出这样的代码。例如,当一个算数表达式中既有无符号的数又有int值时,那个int 值就会转换成无符号的数,把int
转换成无符号的过程和把int 直接赋值给无符号变量一样。
例如
unsigned u =10;
int i= -42;
std::cout<<i+i<<std::endl;
std::cout<<u+i<<std::endl; int占32位,输出4294967264
第一个表达式,两个数相加得到了期望值;在第二个表达式,相加前,先把整数-42转换成无符号的数。把负数转换成无符号数相当于直接给无符号数赋值一个负值,结果等于这个负数加上无符号数的模。
转义序列
换行符 \n
纵向制表符 \v
反斜线 \\
回车符 \r
横向制表符 \t
退格符 \b
问号 \?
进纸符 \f
报警符 \a
双引号 \"
单引号 \‘