定义:数据类型转换是将值从一个数据类型转换成另一种数据类型。
数据类型转换分为隐式转换和强制转换两种。
1.隐式转换
隐式转换:不需要用户干预,编译器自动进行的数据类型转换。
转换原则:
* 基本数据类型的转换以取值范围作为转换基础(目的是保证精度不缺失)。
* 隐式转换发生在 小->大 的转换中。
隐式转换发生的条件:
* 混合类型的算术运算表达式中
int i = 3;
double j = 3.1;
i + j;//i会先转换成double类型,然后再做加法运算
*不同类型的赋值操作
int i = 3;
double j = i;//3会被转换成double类型3.0
C++隐式转换的规则
比如:当char和int进行加法运算时,char会隐式转换成int。当char,int,unsigned int进行加法运算时,char先转换成int,再和int一起转换成unsigned。
2.强制转换
语法:(类型说明符)表达式
double x = 1.4;
int y = (int)x; //y等于1 将x进行取整操作,将小数部分截取掉
double z = (double)3; //z等于3.0
3.类型转换的隐患
类型转换存在两个隐患:数据截断和精度丢失。
主要原因就是目标类型能表达的数值范围或精度比原类型的小。
*数据截断:当大数向小数转换时发生
比如:
int x = 65538;
unsigned short y = (unsigned short)x;
此时 y = 2
因为x是4字节的 65538的二进制是1 0000 0000 0000 0010,
而unsigned short是二个字节,可以表示16位,此时最高位的1将会被截断丢掉,那么就剩下
0000 0000 0000 0010 转换成十进制就是2了。
*精度丢失:当高精度浮点数向低精度浮点数转换的时候发生。
如:double转换成float,long double 转换成double