为什么在乘法中提升int而不是除法?

时间:2015-03-10 14:45:49

标签: c types casting

我的理解是,当乘以例如float和int时,int会被提升为浮点数,因此产品可以有一个小数部分。另一方面,当将浮点数除以int时,没有提升,并且商的任何小数部分都被丢弃。这种不对称的原因是什么?

float f1 = 13.3;
int i1 = 2;
float product = f1 * i1;  // Product will be 26.6
float quotient = f1 / i1;  // Quotient will be 6.0

编辑:嗯,我想我错了。 int也在分区中被提升。对?截断仅适用于具有两个整数的除法。对?这里的网站最佳做法是什么,我应该删除这个问题,因为它的基础很差吗?

2 个答案:

答案 0 :(得分:3)

  

另一方面,当将一个浮点数除以一个int时,没有任何提升,并且该商的任何小数部分都被丢弃。

这根本不正确。保留小数部分。在这个意义上,乘法和除法运算以相同的方式工作。

答案 1 :(得分:0)

如果你运行这个程序,如:

#include <stdio.h>

int main()
{
    float f1 = 13.3;
    int i1 = 2;
    float product = f1 * i1;  // Product will be 26.6
    float quotient = f1 / i1;  // Quotient 

    printf( "product = %f\n",product );
    printf( "quotient = %f\n", quotient );
}

然后输出

product = 26.600000
quotient = 6.650000

根据C标准(6.5.5乘法运算符)

  

3通常的算术转换是在操作数上执行的。

和(6.3.1.8常规算术转换)

  

否则,如果任一操作数的相应实数类型为float,   另一个操作数在不更改类型域的情况下转换为a   类型,其对应的实际类型是float.62)