一 混合运算和隐式转换
2+5=7
整型2+ 浮点5 行吗?成吗?中不中?
C++ 中允许相关的数据类型进行混合运算。
相关类型。
尽管在程序中的数据类型不同,但逻辑上进行这种运算是合理的相关类型在混合运算时会自动进行类型转换,再计算隐式转换。
二 算术转换
转换原则:
确保计算值的精度。转换后尽可能不丢失有效数字。
short,2字节,能表示的数小;
int,4字节,能表示的数大;
int转short,要丢掉2字节的信息,不可取。
short转int,增加存储空间,但不丢失信息,可行。
转换方式
字节少的向字节多的转换
char,unsigned char,unsigned short,bool 转int cout<<('a'+5)<<endl;
精度低的向精度高的转换
int float double
cout<<(5+3.5)<<endl;
有符号向无符号转换
int unsigned int
unsigned int ui=32678
cout<<(5+ui)<<endl;
三 隐式转换时机
混合类型的表达式
int n=2;
char c='a';
cout<<(c+n)<<endl;
赋值
向左值类型转换
double a=8.12;
int k;
k=a;
在需要关系、逻辑表达式的地方。
非0转true,0转false
四 显式转换
程序中明确标记转换的类型,就是显式转换,也就是强制类型转换。
格式
<类型>(<表达式>)
(<类型>)<表达式>
举例
double a=128,b=30;
int n=3;
a=(double)n/2;
n=int(a/b);
总结
(1)相同类型的数据运算,结果的类型不变;
(2)不同类型的数据运算,自动向精度高的类型转换;
(3)赋值运算,向左值类型转换;
(4)强制类型转换;
(<类型>)变量或常量;
<类型>(<表达式>)
(5)精度高向精度低的类型转换,会损失精度;
(6)整型相除,结果为整型,小数被舍去;