浮点型类型转换_第1页
浮点型类型转换_第2页
浮点型类型转换_第3页
浮点型类型转换_第4页
浮点型类型转换_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

浮点型类型转换第一页,共十六页,编辑于2023年,星期一浮点型C语言中除了整型外,另外一种数据类型就是浮点型,浮点型可以表示有小数部分的数据。浮点型包含三种数据类型,分别是单精度的float类型,双精度的double类型,和长双精度longdouble类型。第二页,共十六页,编辑于2023年,星期一浮点型(图表)浮点型floatdoublelongdouble类型位数有效数字取值范围float326~7-1.4e-45~3.4e38double6415~16-4.9e-324~1.8e308longdouble12818~19——第三页,共十六页,编辑于2023年,星期一浮点型参与运算的表达式中存在double类型,或者说,参与运算的表达式不是完全由整型组成的,在没有明确的类型转换标识的情况下(将在下一小节中讲解),表达式的数据类型就是double类型。例如:1+1.5+1.23456789 /*表达式运算结果是double类型*/1+1.5 /*表达式运算结果是double类型*/1+2.0 /*表达式运算结果是double类型*/1+2 /*表达式运算结果是int类型*/例子当的1.5,编译器默认它为双精度的double类型,精度高占据存储空间大,如果只希望以单精度float类型运行,可以在常量后添加字符‘f’或者‘F’都可以,比如1.5F,2.38F。同样的,如果希望数据是以精度更高的longdouble参与运算,可以在常量后添加字符‘l’或者‘L’都可以,比如1.51245L,2.38000L。建议使用大写‘L’,因为小写‘l‘容易和数字1混淆。第四页,共十六页,编辑于2023年,星期一浮点型再举几个运算的表达式的例子,如下所示:inti,j;floatm;doublex;i+j /*表达式运算结果是int类型*/i+m /*表达式运算结果是float类型*/i+m+x /*表达式运算结果是double类型*/第五页,共十六页,编辑于2023年,星期一浮点型指数形式如下所示(‘e’或者‘E’都可以)2.0e3 表示2000.01.23e-2 表示0.0123.123e2 表示12.31.e-3 表示0.001对于指数形式,有以下两点要求:⑴字母e前面必须要有数字⑵字母e的后面必须是整数浮点型小数形式指数形式第六页,共十六页,编辑于2023年,星期一类型转换1隐式转换2显式转换第七页,共十六页,编辑于2023年,星期一类型转换计算过程中,如果遇到不同的数据类型参与运算该怎么办,是终止程序还是转换类型后继续运算。编译器采取第二种方式,如果能够转换成功,程序继续运算,如果转换失败,程序报错同时终止运行。数据类型有两种转换方式,分别隐式转换和显式转换。第八页,共十六页,编辑于2023年,星期一隐式转换C语言中设定了不同数据参与运算时的转换规则,编译器会在悄无声息中进行数据类型的转换,进而计算出最终结果,这就是隐式转换。第九页,共十六页,编辑于2023年,星期一隐式转换 inti; i=2+'A';

先计算“=”号右边的表达式,字符型和整型混合运算,按照数据类型转换先后顺序,把字符型转换为int类型65,然后求和得67,最后把67赋值给变量i。

doubled; d=2+'A'+1.5F;

先计算“=”号右边的表达式,字符型、整型和单精度float类型混合运算,因为有浮点型参与运算,“=”右边表达式的结果一定是double类型,按照数据类型转换顺序,把字符型转换为类型65.0,2转换为2.0,1.5F转换为1.5,最后把双精度浮点数68.5赋值给变量d。第十页,共十六页,编辑于2023年,星期一隐式转换

上述情况都是有低精度类型向高精度类型的转换,如果逆向转换,可能会出现丢失数据的危险,编译器会以警告的形式给出提示。例如:

inti;

i=1.2; 浮点数1.2舍弃小数位后,把整数部分1赋值给变量i。如果i=1.9,运算后变量i的值依然是1,而不是2。注意:把浮点数转换为整数,直接舍弃小数位。第十一页,共十六页,编辑于2023年,星期一隐式转换【范例-1】整型和浮点型数据类型间的隐式类型转换。01#include<stdio.h>02intmain(void)03{04inti;05i=1+2.0*3+1.234+'c'-'A'; /*混合运算*/06printf("%d\n",i); /*输出i*/07return0;08}第十二页,共十六页,编辑于2023年,星期一显式转换隐式类型转换编译器是会产生警告的,提示程序存在潜在的隐患。如果非常明确的希望转换数据类型,这就需要用到显式类型转换了。显式转换格式如下所示:(类型名称)变量或者常量或者(类型名称)(表达式)第十三页,共十六页,编辑于2023年,星期一显式转换例如,需要把一浮点数,以整数的形式使用printf()函数输出,怎么办?就可以调用显示类型转换。

floatf=1.23; printf("%d\n",(int)f);

可以得到输出结果1,没有因为调用的printf()函数格式控制列表和输出列表前后类型不统一导致程序报错。 继续分析上例,显示类型转换只是把f小数位直接舍弃,输出了整数部分,变量f的值和数据类型都没有改变,依然是float类型1.23,可以再次输出结果进行查看。

printf("%f\n",f); 输出结果是:1.230000第十四页,共十六页,编辑于2023年,星期一显式转换 再看下面的例子,分析结果是否相同。 例如

floatf1,f2; f1=(int)1.2+3.4; f2=(int)(1.2+3.4); printf("f1=%f,f2=%f",f1,f2);

输出结果:f1=4.4,f2=4.0

显然结果是不同的,原因是f1只对1.2取整,相当于f1=1+3.4,而f2是对1.2和3.4的和4.6取整,相当于f2=(int)4.6。第十五页,共十六页,编辑于2023年,星期一综合应用——类型转换【范例-2】综合应用数据类型和类型转换的。01#include<stdio.h>02#include<stdio.h>03intmain(void)04{05inti;06doubled;07charc='a';08printf("不同进制数据输出字符\'a\'\n");09printf("%u,0%o,0x%x\n",c,c,c); /*十进制八进制十六进制*/10i=2;11d=2+c+0.5F; /*隐式类型转换*/12printf("隐式数据类型转换%f\n",d);13i=d; /*隐式类型转换,舍弃小数位*/14printf("隐式数据类型转换%d\n",i);15d=(int)1.2+3.9; /*显式

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论