1. 非布尔类型到布尔类型
当我们把一个非布尔类型的算术值赋给布尔类型时,初始值是0则结果为false,否则结果为true。
2. 布尔类型到非布尔类型
当我们把一个布尔值赋给非布尔类型时,初始值为false则结果为0,初始值为true,则结果为1.
3. 浮点到整型
当我们把浮点类型转换成整型时,进行近似处理,保留整数部分。
4. 整型到浮点
把整型赋值给浮点类型,小数补0。整型占用空间大可能会导致精度损失。
5. 其他类型到无符号类型
赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数。
特别的:有符号类型到无符号类型转换:
unsigned char a=-1; //a=255
unsigned char b=-2; //b=254
理解这里的重点在于:类型转换不会改变内存中数值的表示,只会用不同的方式重新解释。
负数在内存中以反码的方式表示,所以-1本身为:1000 0001 反码为原码取反加1,所以在内存中表示为:1111 1111,因此被解释成255。
无符号char表示的数值总数为0~255,总共256个,因此取余后为255.
6. 大值赋值给带符号数
给带符号数一个超出它表示范围的值时,结果是未定义的。