数据类型转换分自动类型转换强制类型转换

自动类型转换:

自动类型转换也称隐式转换

  1. 将一种类型的数据赋值给另外一个变量的时候就会自动转换

    比如:

    • float类型的赋值给int类型的会自动转换成int类型的
    • 赋值运算中,赋值号两边的数据类型不同时,会把右边表达式的类型转换为左边变量的类型,这可能会导致数据失真,或者精度降低。
      • int num = 1 + '3'

自动类型转换并不一定是安全的。对于不安全的类型转换,编译器一般会给出警告。

  1. 转换规则:

1、按照数据长度增加的方向进行,以此保证数据不失真,精度不降低。
比如int和long参与运算,先把int转换成long后再计算
2、把所有浮点类型的都转换成双精度进行运算,即使都是float类型,也会转换成doble类型,再运算
3、char和short参与运算,会先转换成int

强制类型转换:

自动类型转换是编译器根据上下文环境自动判断后的结果,并不完全智能。所以有些需要代码中明确类型转换。

转换方式:

(type_name) expression

  1. type_name为新的数据类型,expression为表达式
  1. (float) a //将变量a转换成float类型
  2. (int) (x+y) //将x+y的结果转换成int类型
  3. // 需要强制转换的例子
  4. void main()
  5. {
  6. // 比如整数相除的表达式,因为都是整数型的 所以没有隐式转换,结算后的结果就会完全忽略小数点部分,如果结果需要小数点,那么就需要强制转换数据类型了。
  7. int sum = 103; //总数
  8. int count = 7; //数目
  9. double average; //平均数
  10. double average1;
  11. average1 = sum / count; //因为sum和count都是int类型,所以运算后的结果会完全忽略小数部分
  12. average = (double)sum / count; //就需要强制转换数据类型了
  13. printf("Average is %lf!\n", average);//Average is 14.714286!
  14. printf("Average1 is %lf!\n", average1);//Average1 is 14.000000!
  15. getchar();
  16. }