浮点型 + 类型转换

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

隐式转换
int i; i = 2 + 'A'; 先计算“=”号右边的表达式,字符型和整型混合运算,按照数据类型 转换先后顺序,把字符型转换为int类型65,然后求和得67,最后把67赋值 给变量i。 double d;
d = 2 + 'A' + 1.5F;
先计算“=”号右边的表达式,字符型、整型和单精度float类型混合运 算,因为有浮点型参与运算,“=”右边表达式的结果一定是double类型,按 照数据类型转换顺序,把字符型转换为类型65.0,2转换为2.0,1.5F转换为 1.5,最后把双精度浮点数68.5赋值给变量d。
i + m +x
/*表达式运算结果是float类型*/
/*表达式运算结果是double类型*/
浮点型
浮点型
小数形式 • 指数形式如下所示(‘e’或者‘E’都可以) 2.0e3 表示2000.0 1.23e-2 表示0.0123 .123e2 表示12.3 1.e-3 表示0.001 对于指数形式,有以下两点要求: ⑴ 字母e前面必须要有数字 ⑵ 字母e的后面必须是整数
指数形式
类型转换
• 1 隐式转换
• 2 显式转换
类型转换
• 计算过程中,如果遇到不同的数据类型参与运
算该怎么办,是终止程序还是转换类型后继续
运算。编译器采取第二种方式,如果能够转换
成功,程序继续运算,如果转换失败,程序报
错同时终止运行。数据类型有两种转换方式,
分别隐式转换和显式转换。
隐式转换
• C语言中设定了不同数据参与运算时的转换 规则,编译器会在悄无声息中进行数据类 型的转换,进而计算出最终结果,这就是 隐式转换。
与运算,可以在常量后添加字符‘l’或者‘L’都可以,比如1.51245L,2.38000L。 建议使用大写‘L’,因为小写‘l‘容易和数字1混淆。
浮点型
• 再举几个运算的表达式的例子,如下所示:
int i,j; float m; double x; i + j /*表达式运算结果是int类型*/
i+m
/*表达式运算结果是double类型*/ /*表达式运算结果是double类型*/
1 + 2/*表达式运算结果是int类型*/
• 例子当的1.5,编译器默认它为双精度的double类型,精度高占据存储空间大, 如果只希望以单精度float类型运行,可以在常量后添加字符‘f’或者‘F’都可
以,比如1.5F,2.38F。同样的,如果希望数据是以精度更高的long double参
隐式转换
• 【范例-1】 整型和浮点型数据类型间的隐 • 式类型转换。
01 02 03 04 05 06 07 08 #include <stdio.h> int main(void) { int i; i=1+2.0*3+1.234+'c'-'A'; /*混合运算*/ printf("%d\n",i); /*输出i*/ return 0; }
浮点型 + 类型转换
数据之间的相互转换也是重点
浮点型
• C 语言中除了整型外,另外一种数据类型
就是浮点型,浮点型可以表示有小数部分
的数据。浮点型包含三种数据类型,分别
是单精度的float类型,双精度的double类型,
和长双精度long double类型。
浮点型ຫໍສະໝຸດ Baidu(图表)
浮点型
float 类型 位数
可以得到输出结果1,没有因为调用的printf()函数格式控制列表和输
出列表前后类型不统一导致程序报错。 继续分析上例,显示类型转换只是把f小数位直接舍弃,输出了整数
部分,变量f的值和数据类型都没有改变,依然是float类型1.23,可以再
次输出结果进行查看。 printf("%f\n", f); 输出结果是:1.230000
double 有效数字
long double 取值范围
float
double long double
32
64 128
6~7
15~16 18~19
-1.4e-45~3.4e38
-4.9e-324~1.8e308 ——
浮点型
• 参与运算的表达式中存在double类型,或者说,参与运算的表达式不是完全
由整型组成的,在没有明确的类型转换标识的情况下(将在下一小节中讲解), 表达式的数据类型就是double类型。例如: 1 + 1.5 + 1.23456789 1 + 1.5 1 + 2.0 /*表达式运算结果是double类型*/
隐式转换
上述情况都是有低精度类型向高精度类型的转换, 如果逆向转换,可能会出现丢失数据的危险,编译器 会以警告的形式给出提示。例如: int i; i = 1.2; 浮点数1.2舍弃小数位后,把整数部分1赋值给变 量i。如果i=1.9,运算后变量i的值依然是1,而不是2。 • 注 意:把浮点数转换为整数,直接舍弃小数位。
显式转换
• 隐式类型转换编译器是会产生警告的,提示程序存在 潜在的隐患。如果非常明确的希望转换数据类型,这 就需要用到显式类型转换了。 显式转换格式如下所示: (类型名称) 变量或者常量 或者 (类型名称) (表达式)
显式转换
• 例如,需要把一浮点数,以整数的形式使用printf()函数输出,怎么办?就 可以调用显示类型转换。 float f=1.23; printf("%d\n",(int)f);
显式转换
再看下面的例子,分析结果是否相同。 例如 float f1,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。
综合应用——类型转换
• 【范例-2】 综合应用数据类型和类型转换的。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 #include <stdio.h> #include <stdio.h> int main(void) { int i; double d; char c='a'; printf("不同进制数据输出字符\'a\'\n"); printf("%u,0%o,0x%x\n",c,c,c); /*十进制八进制十六进制*/ i=2; d=2+c+0.5F; /*隐式类型转换*/ printf("隐式数据类型转换%f\n",d); i=d; /*隐式类型转换,舍弃小数位*/ printf("隐式数据类型转换%d\n",i); d=(int)1.2+3.9; /*显式类型转换,1.2取整*/ printf("显式数据类型转换%f\n",d); d=(int)(1.2+3.9); /*显式类型转换,和取整*/ printf("显式数据类型转换%f\n",d); return 0; }
相关文档
最新文档