|
C语言规定,不同类型的数据需要转换成同一类型后才可进行计算,在整型、实型和字符型数据之间通过 类型转换便可以进行混合运算(但不是所有类型之间都可以进行转换) .当混合不同 类型的变量进行计算时,便可能会发生类型转换 相同类型的数据在转换时有规则可 循: 字符必须先转换为整数(C语言规定字符类型数据和整型数据之间可以通用) short型转换为int型(同属于整型) float型数据在运算时一律转换为双精度(double)型,以提高运算精度(同属于实型) 赋值时,一律是右部值转换为左部类型 [注] 当整型数据和双精度数据进行运算时,C先将整型数据转换成双精度型数据,再进行运算,结果为双精度类型数据 当字符型数据和实型数据进行运算时,C先将字符型数据转换成实型数据,然后进行计算,结果为实型数据 2.4 2.4.1 C 图2-2 注意:在表达式中,所有的float 在赋值语句中,如果赋值号左右两端的类型不同,则将赋值号右边的值 转换为赋值号左边的类型,其结果类型还是左边类型。 因为函数参数是表达 式,因此,当参数传递给函数时,也发生类型转换。具体地说,char 也可以将图2-2 图2-3 下面举行说明类型转换的规则。例如执行: x=100+'a'+1.5 * u+f/'b'-s * 3.1415926 其中,u (1 (2 (3 (4 (5 (6 (7 (8 (9 2.4.2 int i … i=i+9.801 按照隐式处理方式,在处理i=i+9.801 int i … i=i+ 这时直接将9.801 显示类型转换的方法是在被转换对象 (或表达式)前加类型标识符,其格式是: (类型标识符)表达式 例如,有如下程序段: main { int a float c b=a+int printf } 在上述程序的运行过程 中,在执行语句b=a+int 2.5 一个表达式完成一个或多个操作,最终得到一个结果,而结果的数据类型由参加运算的操作决定。最简单 的表达式是只含一个常量或变量的表达式,即只含一个操作数而不含运算符。 C n n n n n n 2 n n n n n n n n n n 这些运算符如表2-4 表2-4 C + + 逻辑与、或、非 &&,︱︱,! 续表2 * 加、 减、乘、除、求模运算 + 关系操作符 <,<=,>,>=,= =,! = 按位与、或、异或、求反 &, 逗号表达式 , 类型转换 () 移位运算 < <,> > 条件运算 ?: 求占用的字节数 sizeof 赋值 =,+ =, 先看程序: #include<stdio.h> #include<stdlib.h> int main(int argc, char**argv){ unsigned int right = 1; char left = -1; if(left < right)printf("%d < %d\n", left, right); else if(left == right)printf("%d = %d\n", left, right); else printf("%d > %d\n", left, right); system("PAUSE"); return 0; } 运行结果是:-1 > 1 解释:按步骤进行. 1. 如果其中一个操作数为long double类型,则另一个操作数被转换为long double. 2. 否则,如果其中一个操作数为double, 则另一个操作数被转换为double. 3. 否则,如果其中一个操作数为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.
引致:http://blog.chinaunix.net/u2/70445 /showart_1841233.html |



