强制类型转换(数据类型)
注意:强制类型转换是不安全的,要谨慎使用
小的类型转大的类型,一般没有问题
大的类型转小的类型,就可能出现数据的截断和丢失
所谓的强制类型转换,简称强转,就是在某次运算中采用某种方式,将变量的类型转换成其他类型来参与本次运算。不会影响变量自身的类型,变量自身的类型只和定义变量时有关。
1 显式强转
格式:
(新的类型)变量名;
例:
1 #include <stdio.h>
2
3 int main(int argc, const char *argv[])
4 {
5 int m = 5;
6 int n = 2;
7 float ret1 = m/n;
8 printf("ret1 = %f\n", ret1);//2.000000
9 //原因是 m和n 都是int类型 所以运算的结果也是 int类型
10 //会把小数部分舍弃 m/n 的结果就已经是 2了
11 //再把他赋值给 float类型的变量 结果就是 2.000000 了
12
13 float ret2 = (float)m/(float)n; //整形做除法 需要强转成 浮点型 参
与运算
14 printf("ret2 = %f\n", ret2);//2.500000
15
16 //强制类型转换不会改变变量自身的类型
17 printf("m = %d, n = %d\n", m, n);//5 2
18
19 return 0;
20 }
2 隐式强转
隐式是由编译器根据上下文自动推导出来的,如果编译器认为本次转换是安全的,则允许直接使用。如果编译器认为本次转换是不安全的,可能会报一个警告,具体报不报取决于编译器的严谨程度
例:
1 #include <stdio.h>
2
3 int main(int argc, const char *argv[])
4 {
5 float m = 314.567;
6 int n = m;//这种操作相当于对浮点型取整的操作
7 //会舍弃小数部分
8 printf("n = %d\n", n);// 314
9
10 return 0;
11 }