萌导航

10.1C语言数据类型转换

作者: 叶子 来源: 怪哈哈网 日期: 2015-09-29 10:23:50 人气: -

数据类型转换就是将数据(变量、表达式的结果)从一种类型转换到另一种类型。例如,为了保存小数你可以将int类型的变量转换为double类型。

数据类型转换的一般格式为:

(type_name) expression

type_name为要转换到的数据类型,expression为表达式。例如:

  1. (float) a;  //把a转换为实型
  2. (int)(x+y);  //把x+y的结果转换为整型
  3. (float) 100;  //将一个常量转换为实型

【示例】将整数转换为浮点数:

  1. #include <stdio.h>
  2. int main(){
  3. int sum = 17, count = 5;
  4. double mean;
  5. mean = (double) sum / count;
  6. printf("Value of mean : %f\n", mean);
  7. return 0;
  8. }

运行结果:
Value of mean : 3.400000

需要注意的是,类型转换运算符( )的优先级高于/(double) sum / count会先将 sum 转换为 double 类型,然后再进行除法运算。如果写作(double) (sum / count),那么运行结果就是 3.000000。

这种由程序员显式进行的转换称为强制类型转换。除了强制类型转换,在不同数据类型的混合运算中编译器也会隐式地进行数据类型转换,称为自动类型转换

自动类型转换遵循下面的规则:

  1. 若参与运算的数据类型不同,则先转换成同一类型,然后进行运算。
  2. 转换按数据长度增加的方向进行,以保证精度不降低。例如int型和long型运算时,先把int量转成long型后再进行运算。
  3. 所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算。
  4. char型和short型参与运算时,必须先转换成int型。
  5. 在赋值运算中,赋值号两边的数据类型不同时,需要把右边表达式的类型将转换为左边变量的类型。如果右边表达式的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度。


下图表示了类型自动转换的规则:

【示例】自动数据类型转换。

  1. #include<stdio.h>
  2. int main(){
  3. float PI=3.14159;
  4. int s1, r=5;
  5. double s2;
  6. s1 = r*r*PI;
  7. s2 = r*r*PI;
  8. printf("s1=%d, s2=%f\n", s1, s2);
  9. return 0;
  10. }

运行结果:
s1=78, s2=78.539753

在计算表达式r*r*PI时,r 和 PI 都转换成double类型,表达式的结果也为double类型。但由于 s1 为整型,所以赋值运算的结果仍为整型,舍去了小数部分。

注意是将小数部分直接丢掉,而不是按照四舍五入向前舍入。


无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类型。请看下面的例子:

  1. #include<stdio.h>
  2. int main(){
  3. float f=5.75;
  4. printf("(int)f=%d, f=%f\n",(int)f, f);
  5. return 0;
  6. }

运行结果:
(int)f=5, f=5.750000


转载请注明文章来源(欢迎分享): http://www.guaihaha.com/c/5631.html

相关内容

HTML5游戏 HTML5游戏
关于怪哈哈
怪哈哈是一个集搞笑,美女,动漫,游戏,技术等为核心的综合性网站!
联系我们
商务洽谈、广告合作、友情链接、侵权举报,这些都可以联系我们哦!
关于我们 - 联系我们 - 广告服务 - 免责申明  
本站文字和图片均为严格审查筛选收藏,均收集整理于互联网,其著作权归原作者所有,如果有侵犯您权利的照片,请来信告知,我们将及时撤销相应文字和图片。
Copyright @2014-2020 怪哈哈网 All Rights Reserved。
【谢谢大家一直支持贵站!】