C++类型转换
一、类型所能表示的值的范围决定了转换的过程
1、非布尔类型的算术值赋给布尔类型,初始值为0,则结果为false;否则为true。
bool a = 42; // a == true
bool b = 0; // b == false
2、布尔类型赋给非布尔类型,初始值为false,则结果为0,初始值为true,则结果为1。
int c = a; // c == 1
int d = b; // d == 0
3、浮点数赋给整型,进行近似处理;结果值将仅保留浮点数中小数点之前的部分。
int e = 3.14; // e == 3
4、整型赋给浮点类型,小数部分为0;如果该整型所占的空间超过了浮点类型的容量,精度可能损失。
float f = 520; // f == 520.0
5、赋给无符号类型一个超出它表示范围的值,结果是初始值对无符号类型表示数值总数取模后的余数。
unsigned char g = -1; // g == 255, -1转换为无符号数为255,255对256(unsigned char所能表示的数一共有256个)取模后的余数为255
unsigned short h = -10; // h == 65526, -10转换为无符号数为65526,65526对65536(unsigned short所能表示的数一共有65536个)取模后的余数为65526
6、赋给带符号类型一个超出它表示范围的值,结果是未定义的。此时,程序可能继续工作、可能崩溃,也可能生成垃圾数据。
signed char i = 256; // i的值未定义
二、含有无符号类型的表达式
当一个表达式中既有无符号整型,又有带符号整型,则带符号整型转换为相应的无符号整型,然后进行算数计算。
如:
int i = -42;
unsinged int j = 10;
unsigned int k = i + j; // k == 4294967264(假设int长度为32bit)
int t = i + j; // t == -32