当前位置:嗨网首页>书籍在线阅读

09-除法运算符

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

5.2.6 除法运算符: /

C使用符号 / 来表示除法。 / 左侧的值是被除数,右侧的值是除数。例如,下面 four 的值是 4.0

four = 12.0/3.0;

整数除法和浮点数除法不同。浮点数除法的结果是浮点数,而整数除法的结果是整数。整数是没有小数部分的数。这使得5除以3很让人头痛,因为实际结果有小数部分。在C语言中,整数除法结果的小数部分被丢弃,这一过程被称为截断(truncation)。

运行程序清单5.6中的程序,看看截断的情况,体会整数除法和浮点数除法的区别。

程序清单5.6  divide.c 程序

/* divide.c -- 演示除法 */
#include <stdio.h>
int main(void)
{
     printf("integer division:  5/4   is %d \n", 5 / 4);
     printf("integer division:  6/3   is %d \n", 6 / 3);
     printf("integer division:  7/4   is %d \n", 7 / 4);
     printf("floating division: 7./4. is %1.2f \n", 7. / 4.);
     printf("mixed division:    7./4  is %1.2f \n", 7. / 4);
     return 0;
}

程序清单5.6中包含一个“混合类型”的示例,即浮点值除以整型值。C相对其他一些语言而言,在类型管理上比较宽容。尽管如此,一般情况下还是要避免使用混合类型。该程序的输出如下:

integer division:  5/4   is 1
integer division:  6/3   is 2
integer division:  7/4   is 1
floating division: 7./4. is 1.75
mixed division:    7./4  is 1.75

注意,整数除法会截断计算结果的小数部分(丢弃整个小数部分),不会四舍五入结果。混合整数和浮点数计算的结果是浮点数。实际上,计算机不能真正用浮点数除以整数,编译器会把两个运算对象转换成相同的类型。本例中,在进行除法运算前,整数会被转换成浮点数。

C99标准以前,C语言给语言的实现者留有一些空间,让他们来决定如何进行负数的整数除法。一种方法是,舍入过程采用小于或等于浮点数的最大整数。当然,对于 3.8 而言,处理后的 3 符合这一描述。但是 -3.8 会怎样?该方法建议四舍五入为 -4 ,因为 -4 小于 -3.8 。但是,另一种舍入方法是直接丢弃小数部分。这种方法被称为“趋零截断”,即把 -3.8 转换成 -3 。在C99以前,不同的实现采用不同的方法。但是C99规定使用趋零截断。所以,应把 -3.8 转换成 -3