C语言中对不同类型的数据进行混合运算时需要进行类型转换。转换的方式有两种,一是自动转换(隐式转换),二是强制类型转换(显示转换)。
一:自动转换
(1)赋值转换
赋值运算符两边的数据类型不同,系统将进行自动转换。赋值运算符右边表达式的类型转换成赋值运算符左边变量的类型,然后对变量赋值。
具体的赋值转换规则:
1) 浮点数(实型)值赋给整型变量时,舍去小数部分。
2) 整型值赋给浮点数(实型)变量时,增加小数部分(小数点后的部分全为0)。
3) 字符赋给整型变量时,将字符的ASCII码值赋给整型变量。
(2)运算转换
不同类型的值在同一表达式中进行混合运算时,它们将自动转换成同一类型,然后进行运算。
1) 转换时按照数据长度(该类型数据占用存储单元的字节数)增加的方向进行。即按“向高看齐”的原则,提升“较低”的类型,从而保证精度不被降低。
2) 转换时一步到位的转换,例int和long混合运算时,并非时先把int转换为unsigned,在转换为long,而是直接把int转换为long。
3) 类型转换:数据按照转换后的类型参加运算,但运算过程并不会改变数据本身的类型。
4) 上图中横向箭头的含义:实型数都是按双精度参与运算的。也就是说,两个float的变量进行运算,也实现转换为double类型,然后进行运算。同理,char、short也是先转换为int,在进行运算。
二:强制类型转换
(类型说明符)表达式
强制类型转换时,必须使用一组圆括号,括住要转向的类型说明符。
要转换类型的表达式一般也加圆括号,如果是原子表达式,也可不加。
强制类型转换和自动转换一样,并不会改变原表达式本身的值与类型,只是通过对原来表达式强制转换,得到一个新类型的数据而已。
(ps:如果以后有更多的新知识,会继续更改,欢迎大家留言!)