background image

(1)

 

首先计算 ch/i,ch → int 型,ch/i → int 型。

(2)

 

接着计算 f*d-i,由于最长型为 double 型,故 f→double 型,i→double 型,f*d-i→double

型。
(3)(ch/i)   和 (f*d-i) 进 行 加 运 算 , 由 于 f*d-i 为 double 型 , 故 ch/i→double 型 , ch/i+(f*d-
i)→double 型。
(4)由于 result 为 int 型,故 ch/i+(f*d-i)→double→int,即进行截断与舍入,最后取值为整型。

3.输出转换
在程序中将数据用 printf 函数以指定格式输出时,当要输出的盐据类型与输出格式不符时,
便自动进行类型转换,如一个 long 型数据用整型格式(%d)输出时,则相当于将 long 型转
换成整型(int)数据输出;一个字符(char)型数据用整型格式输出时,相当于将 char 型转
换成 int 型输出。
注意:较长型数据转换成短型数据输出时,其值不能超出短型数据允许的值范围,否则
转换时将出错。如:

long a=80000;
printf("%d",a);
运行结果为 14464,因为 int 型允许的最大值为 32767,80000 超出此值,故结果取以
32768 为模的余数,即进行如下取余运算:
(80000-32768)-32768=14464;
输出的数据类型与输出格式不符时常常发生错误,如:
int d=9;
printf("%f",d);

float c=3.2;
printf("%d",c);
将产生错误的结果。

同一句语句或表达式如果使用了多种类型的变量和常量(类型混用),C 会自动把它们
转换成同一种类型。以下是自动类型转换的基本规则:

1. 在表达式中,char 

 

和 short 

 

类型的值,无论有符号还是无符号,都会自动转换成 int 或

 

者 unsigned int

 

(如果 short 

 

的大小和 int 一样,unsigned short 

 

的表示范围就大于 int,在这

种情况下,unsigned short 

 

被转换成 unsigned int)。因为它们被转换成表示范围更大的类型,

故而把这种转换称为 升级(promotion ”

) 。

2.   按照 从高 到低 的顺 序给 各种 数据 类型 分等 级, 依次 为: long double, double, float, 
unsigned long long, long long, unsigned long, long, unsigned int 

 

和 int。这里有一个小小的例外,

 

如果 long   

和 int 

 

大小相同,则 unsigned int 

 

的等级应位于 long 之上。char   

和 short 并没有出

 

现于这个等级列表,是因为它们应该已经被升级成了 int 

 

或者 unsigned int。

3. 在任何涉及两种数据类型的操作中,它们之间等级较低的类型会被转换成等级较高的