C语言隐式类型转换规则_(比较实用)

上传人:飞*** 文档编号:4848590 上传时间:2017-08-26 格式:DOC 页数:7 大小:64KB
返回 下载 相关 举报
C语言隐式类型转换规则_(比较实用)_第1页
第1页 / 共7页
C语言隐式类型转换规则_(比较实用)_第2页
第2页 / 共7页
C语言隐式类型转换规则_(比较实用)_第3页
第3页 / 共7页
C语言隐式类型转换规则_(比较实用)_第4页
第4页 / 共7页
C语言隐式类型转换规则_(比较实用)_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《C语言隐式类型转换规则_(比较实用)》由会员分享,可在线阅读,更多相关《C语言隐式类型转换规则_(比较实用)(7页珍藏版)》请在金锄头文库上搜索。

1、C 语言隐式类型转换规则 C 语言规定,不同类型的数据需要转换成同一类型后才可进行计算,在整型、实型和字符型数据之间通过类型转换便可以进行混合运算(但不是所有类型之间都可以进行转换 ) .当混合不同类型的变量进行计算时,便可能会发生类型转换 相同类型的数据在转换时有规则可循: 字符必须先转换为整数(C 语言规定字符类型数据和整型数据之间可以通用) short 型转换为 int 型(同属于整型 ) float 型数据在运算时一律转换为双精度(double)型,以提高运算精度 (同属于实型) 赋值时,一律是右部值转换为左部类型 注 当整型数据和双精度数据进行运算时,C 先将整型数据转换成双精度型数

2、据,再进行运算,结果为双精度类型数据 当字符型数据和实型数据进行运算时,C 先将字符型数据转换成实型数据,然后进行计算,结果为实型数据2.4 数据类型转换在 C 语言的表达式中,准许对不同类型的数值型数据进行某一操作或混合运算。当不同类型的数据进行操作时,应当首先将其转换成相同的数据类型,然后进行操作。数据类型转换有两种形式,即隐式类型转换和显示类型转换。2.4.1 隐式类型转换所谓隐式类型转换就是在编译时由编译程序按照一定规则自动完成,而不需人为干预。因此,在表达式中如果有不同类型的数据参与同一运算时,编译器就在编译时自动按照规定的规则将其转换为相同的数据类型。C 语言规定的转换规则是由低级

3、向高级转换。例如,如果一个操作符带有两个类型不同的操作数时,那么在操作之前行先将较低的类型转换为较高的类型,然后进行运算,运算结果是较高的类型。更确切地说,对于每一个算术运算符,则遵循图 2-2 所示的规则。图 2-2 数据类型转换规则之一注意:在表达式中,所有的 float 类型都转换为 double 型以提高运算精度。在赋值语句中,如果赋值号左右两端的类型不同,则将赋值号右边的值转换为赋值号左边的类型,其结果类型还是左边类型。因为函数参数是表达式,因此,当参数传递给函数时,也发生类型转换。具体地说,char 和 short 均转换为 int;float 转换为 double。这就是为什么我

4、们把函数参数说明为 int 和 double,尽管调用函数时用 char 和 float .也可以将图 2-2 所示的规则用图 2-3 表示。图 2-3 中的水平箭头表示必定转换,纵向箭头表示两个操作对象类型不同时的转换方向。图 2-3 数据类型转换规则之二下面举行说明类型转换的规则。例如执行:x=100+a+1.5 * u+f/b-s * 3.1415926其中,u 为 unsigned 型,f 为 float 型,s 为 short 型,x 为 float 型。式中右面表达式按如下步骤处理:(1)首先将a、b和 s 换成 int,将 1.5 和 f 转换为 double 型。(2)计算 1

5、00+a,因 a已转换为 int 型,于是此运算结果为 197。(3)计算 1.5*u,由于 1.5 已转换为 double,u 是 unsigned 型,于是首先 u 转换为 double,然后进行运算,运算结果为 double。(4)计算 197+1.5 * u,先将 197 转换为 double(如 197.0000),其结果为 double。(5)计算 f/ b,f 已转换为 double,b已转换为 int,于是先将b 再转换为 double,其结果为 double。(6)计算(197+1.5 * u)+f / b ,者均为 double,于是结果也为double。(7)计算 s *

6、 3.1415926,先将 s 由 int 转换为 double,然后进行运算,其结果为 double。(8)最后与前面得的结果相减,结果为 double。(9)最后将表达式的结果转换为 float 并赋给 x。2.4.2 显式类型转换显示类型转换又叫强制类型转换,它不是按照前面所述的转换规则进行转换,而是直接将某数据转换成指定的类型。这可在很多情况下简化转换。例如,int i;i=i+9.801按照隐式处理方式,在处理 i=i+9.801 时,首先 i 转换为 double 型,然后进行相加,结果为 double 型,再将 double 型转换为整型赋给i。int i;i=i+(int)9.

7、801这时直接将 9.801 转换成整型,然后与 i 相加,再把结果赋给 i。这样可把二次转换简化为一次转换。显示类型转换的方法是在被转换对象(或表达式)前加类型标识符,其格式是:(类型标识符)表达式例如,有如下程序段:main()int a,b;float c;b=a+int(c);printf(b=d% n,b);在上述程序的运行过程中,在执行语句 b=a+int(c)时,将 c 的值临时强制性转化为 int 型,但变量 c 在系统中仍为实型变量,这一点很重要,不少初学者在这个问题上忽略了这个问题。2.5 运算符和表达式 2.5.1 运算符和表达式概述 1表达式一个表达式包含一个或多个操作

8、,操作的对象称作运算元(或叫作操作数),而操作本身通过运算符体现的。例如 a、a-b、c=9.801 等都是一个表达式。一个表达式完成一个或多个操作,最终得到一个结果,而结果的数据类型由参加运算的操作决定。最简单的表达式是只含一个常量或变量的表达式,即只含一个操作数而不含运算符。C 语言中表达式的种类十分丰富,主要有如下一些:n 算术表达式:进行一般的计算。n 赋值表达式:进行赋值操作。n 关系表达式:进行比较判断。n 逻辑表达式:进行逻辑比较判断。n 条件表达式:进行条件满足与否的判断。n 逗号表达式:实际上是一种复杂运算,可以包含多个算术表达式。2C 语言的操作符 C 语言的特点之一是具有

9、丰富和使用灵活的运算符,概括起来它有如下的几类运算符:n 算术运算符。n 赋值运算符(包括符合赋值运算符)。n 关系运算符。n 逻辑运算符。n 条件运算符。n 逗号运算符。n 位运算符。n 指针运算符。n 求字节运算符(可以归并到函数的应用中去,它是通过函数sizeof()来进行运算的)。n 强制类型转换运算符。这些运算符如表 2-4 所示。表 2-4 C 语言中的运算符名称操作符自增,自减+ +,- -逻辑与、或、非,!续表 24 名称操作符指针操作及引用*,加、减、乘、除、求模运算+,*,/,%关系操作符,=,= =,! =按位与、或、异或、求反&,丨,逗号表达式,类型转换()移位运算条件

10、运算?:求占用的字节数sizeof赋值=,+ =, =,*=,/ =,% =先看程序:#include#includeint main(int argc, char*argv)unsigned int right = 1;char left = -1;if(left %dn, left, right);system(PAUSE);return 0;运行结果是:-1 1解释:按步骤进行.1. 如果其中一个操作数为 long double 类型,则另一个操作数被转换为 long double.2. 否则,如果其中一个操作数为 double, 则另一个操作数被转换为 double.3. 否则,如果其

11、中一个操作数为 float, 则另一个操作数也转换为 float.4. 否则,两个操作数进行 整型升级 :a. 如果其中一个操作数为 unsigned long int, 则另一个操作数也被视为 unsigned long int.b. 否则,如果其中一个操作数为 long int,而另一个操作数类型是 unsigned int, 并且 long int 能够表示unsigned int 的所有值,则另一个操作数也被视为 long int;如果 long int 不能表示 unsigned int 的所有值,则两个数都被视为 unsigned long int.c. 否则, 如果其中一个操作数是 long int,则另一个操作数也被视为 long int.d. 否则, 如果其中一个操作数是 unsigned int, 则另一个操作数也被视为 unsigned int.e. 否则, 两个操作数都被视为 int.

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 研究报告 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号