类型转换

1,当我们把一个非布尔类型的算术变量赋给布尔类型时,初始值为0则结果为false,否者结果为true.

1 if(0){// false
2 }
3 if(-1){// true
4 }
5 if(1){// true
6 }
7 // 总结:非0即真

2.当我们把一个布尔值赋给非布尔值时,初始值为false则结果为0,初始值为true则结果为1.

1 int a=false;// 0
2 int b=true;// 1

3.当我们把一个浮点数赋值给整数类型时,进行了近似处理.结果值将仅保留浮点数中小数点之前的部分.

 1 int i = 3.14;// 3 

4. 当我们把一个整数值赋给浮点类型时,小数部分记为0.如果该整数所占的空间超过了浮点类型的常量,精度可能有损失.

 1 double i = 2;// i = 2.0 

5.当我们赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数.

 1 unsigned char ch = -100;// -100%256=156 

6.当我们赋给带符号类型一个超出它表示的范围的值时,结果是未定义的.此时,程序可能继续工作,可能崩溃,也可能生成垃圾数据.

 1 signed char c = 256// 未定义,访问可能要出错 

7.含有无符号类型的表达式时,先把其他变量转换(转换过程与第5点类似)为无符号类型,然后进行运算.注意当两个无符号类型的

相减时永远不为负.

1 unsigned int u = 10;
2 int i = -42;// 32位
3 cout<< u+i<<endl;// -42%2^32=4294967254+10 = 4294967264
4 unsigned int u1 = 42,u2 =10; 5 cout<< u1-u2<<endl;// 32 6 cout<< u2-u1<<endl;// 负数取摸后的值
原文地址:https://www.cnblogs.com/studweijun/p/5277896.html