网站建设与网页设计 难学吗,福田蒙派克6座二手值多少钱,爱站工具想说超人下拉系统,介绍自己的做的网站1.定义
数据类型转换#xff0c;听这个名字你就懂了#xff0c;就是将数据从一种类型转换为另一种类型。 2.自动类型转换
自动类型转换就是编译器默默地、隐式地、偷偷地进行的数据类型转换#xff0c;这种转换不需要程序员干预#xff0c;会自动发生。比如说#xff1a…1.定义
数据类型转换听这个名字你就懂了就是将数据从一种类型转换为另一种类型。 2.自动类型转换
自动类型转换就是编译器默默地、隐式地、偷偷地进行的数据类型转换这种转换不需要程序员干预会自动发生。比如说
float f 100;
//100 是 int 类型的数据需要先转换为 float 类型才能赋值给变量 fint n f;
//f 是 float 类型的数据需要先转换为 int 类型才能赋值给变量 n
在赋值运算中赋值号两边的数据类型不同时需要把右边表达式的类型转换为左边变量的类型这可能会导致数据失真或者精度降低所以说自动类型转换并不一定是安全的。对于不安全的类型转换编译器一般会给出警告。
有时候在不同类型的混合运算中编译器也会自动地转换数据类型将参与运算的所有数据先转换为同一种类型然后再进行计算。转换的规则如下
1)转换按数据长度增加的方向进行以保证数值不失真或者精度不降低。例如int 和 long 参与运算时先把 int 类型的数据转成 long 类型后再进行运算。
2)所有的浮点运算都是以双精度进行的即使运算中只有 float 类型也要先转换为 double 类型才能进行运算。
3)char 和 short 参与运算时必须先转换成 int 类型。
下图对这种转换规则进行了更加形象地描述 为了让读者更容易的理解自动类型转换我们举一个例子
#includestdio.h
int main(){float PI 3.14159;int s1, r 5;double s2;s1 r * r * PI;s2 r * r * PI;printf(s1%d, s2%f\n, s1, s2);return 0;
}
运行结果
s178, s278.539749在计算表达式r*r*PI时r 和 PI 都被转换成 double 类型表达式的结果也是 double 类型。但由于 s1 为整型所以赋值运算的结果仍为整型舍去了小数部分导致数据失真。 3.强制类型转换
自动类型转换是编译器根据代码的上下文环境自行判断的结果有时候并不是那么“智能”不能满足所有的需求。如果需要程序员也可以自己在代码中明确地提出要进行类型转换这称为强制类型转换。 自动类型转换是编译器默默地、隐式地进行的一种类型转换不需要在代码中体现出来强制类型转换是程序员明确提出的、需要通过特定格式的代码来指明的一种类型转换。换句话说自动类型转换不需要程序员干预强制类型转换必须有程序员干预。
举个例子
(float) a; //将变量 a 转换为 float 类型
(int)(xy); //把表达式 xy 的结果转换为 int 整型
(float) 100; //将数值 100默认为int类型转换为 float 类型
下面是一个需要强制类型转换的经典例子
#include stdio.h
int main(){int sum 103; //总数int count 7; //数目double average; //平均数average (double) sum / count;printf(Average is %lf!\n, average);return 0;
}
运行结果
Average is 14.714286!
sum 和 count 都是 int 类型如果不进行干预那么sum / count的运算结果也是 int 类型小数部分将被丢弃虽然是 average 是 double 类型可以接收小数部分但是心有余力不足小数部分提前就被“阉割”了它只能接收到整数部分这就导致除法运算的结果严重失真。 既然 average 是 double 类型为何不充分利用尽量提高运算结果的精度呢为了达到这个目标我们只要将 sum 或者 count 其中之一转换为 double 类型即可。上面的代码中我们将 sum 强制转换为 double 类型这样sum / count的结果也将变成 double 类型就可以保留小数部分了average 接收到的值也会更加精确。 4.自动类型转换 VS 强制类型转换
可以自动转换的类型一定能够强制转换但是需要强制转换的类型不一定能够自动转换。现在我们学到的数据类型既可以自动转换又可以强制转换以后我们还会学到一些只能强制转换而不能自动转换的类型。 可以自动进行的类型转换一般风险较低不会对程序带来严重的后果例如int 到 double 没有什么缺点float 到 int 顶多是数值失真。只能强制进行的类型转换一般风险较高或者行为匪夷所思例如char * 到 int * 就是很奇怪的一种转换这会导致取得的值也很奇怪再如int 到 char * 就是风险极高的一种转换一般会导致程序崩溃。 使用强制类型转换时程序员自己要意识到潜在的风险。 5.小结
其实这部分内容不用死记硬背面试也不会单独问这个只不过这是基础中的基础如果你不会的话就会对阅读代码产生障碍 而且这个读代码读多了自然懂了。所以我建议把这篇文章收藏然后有事没事拿出来看两遍然后你对这个知识点绝对是了解的很透彻了。