C语言王者归来
上QQ阅读APP看书,第一时间看更新

2-7-1 基础数据形态的转换

在设计C语言程序时,时常会面对不同变量数据形态之间的运算。例如,将某一浮点数和某一整数相加,碰上这种情形时,C编译程序会主动将整数转换成浮点数来运算。

实例1:有一C语言指令如下:

     s = a + b;

假设执行指令前,a是整数,a = 3;b是浮点数,b = 2.5;s是浮点数,s = 2.0。

则在运算完成后,s = 5.5,a = 3,b = 2.5。

实例2:有一C语言指令如下:

     s = a + b;

假设a是整数,a = 3;b是浮点数,b = 2.5;s是整数,s = 2。

由于s是整数,所以尽管a + b = 5.5,但s只能存储整数,所以最后结果s = 5。

程序实例ch2_9.c:数据形态的转换实例。

实例3:有一C语言指令如下:

     s = a / b;

假设执行指令前,a、b都是整数,s则是浮点数,其中a = 3,b = 2,s = 1.0。

执行指令时,计算机会先执行整数相除,所以a / b的结果是1,然后将1存入s值内,因为s是浮点数,所以执行结果s值是1.0。

从以上运算可知,若不是一位很熟悉C语言的程序设计员,可能会被不同操作数形态的运算搞得有一点头疼。所以设计程序时,最好的方法是尽量避免不同形态的操作数在同一指令中出现。

当无法避免不同形态的操作数在同一指令中时,C语言提供了另一个功能可克服上面问题,那就是更改数据形态。使用时,只要在某个变量前加上括号,然后在括号中指明操作数形态即可。例如,若想将上述实例a和b强制改成浮点数,则可以将上述表达式改成:

     s = ( float) a / ( float) b;

此时计算机在执行时会先将a改成3.0,b改成2.0,所以运算完成后s的值是1.5。

另外,如果是进行整数值相除,假设指令如下:

     s = 3 / 2;

上述执行结果是1,假设s是浮点数,我们期待获得浮点数1.5的除法结果,可以将上述指令改为下列方式之一,即可以获得正确的浮点数结果。

     s = 3.0 / 2.0;

     s = 3 / 2.0;

     s = 3.0 / 2;

程序实例ch2_10.c:数据形态的转换实例。

 上述第12行的printf( )函数内的输出格式“%3.2f”,是设定输出的浮点数整数有3位数,其中小数部分有2位数。

实例4:有一C语言指令如下:

     s = (int) a / (int) b;

假设a和b是浮点数,a = 4.6,b = 2.1,s是整数,s = 10。

执行指令时,由于C语言会先将浮点数a改成整数4,b改成整数2,所以运算完成后s的值是2。

程序实例ch2_11.c:数据形态的转换应用。