C 为什么浮点除以整数返回浮点

C 为什么浮点除以整数返回浮点,c,C,我在学C。 我想知道为什么会有一个浮点,即使其中一个变量是int float x = 5.0; int y = 2; float result = x / y; 我猜结果是20万。但它确实返回一个浮动(2.500000) 我想应该是2.000000,因为如果你除以2整数,这就是结果。我认为如果你使用int和float,它会选择最不精确的值 运算符/仅当两个操作数都是整数时才执行整数除法。如果除法中的一个操作数是浮点数,另一个是整数(int,long等),则结果将是浮点 这意味着,这将是一个浮

我在学C。 我想知道为什么会有一个浮点,即使其中一个变量是int

float x = 5.0;
int y = 2;

float result = x / y;
我猜结果是20万。但它确实返回一个浮动(2.500000)


我想应该是2.000000,因为如果你除以2整数,这就是结果。我认为如果你使用int和float,它会选择最不精确的值

运算符
/
仅当两个操作数都是整数时才执行整数除法。

如果除法中的一个操作数是
浮点数,另一个是整数(
int
long
等),则结果将是浮点


这意味着,这将是一个浮点除法:如果你将5除以2,你会得到预期的2.5。

首先,
result
是一个浮点,因此它可以保存十进制值


其次,其中一个操作数
x
y
是浮点,因此返回值是浮点。这也适用于加法、乘法和减法

因为C的
通常的算术转换

引用ANSI C标准§3.2.1.5常用算术转换:

许多期望算术类型的操作数的二进制运算符会导致转换,并以类似的方式生成结果类型。目的是生成一个公共类型,它也是结果的类型。这种模式称为通常的算术转换:首先,如果任一操作数的类型为long double,则另一个操作数将转换为long double。[…]否则,如果任一操作数的类型为float,则另一个操作数将转换为float。

我的

我认为如果你使用int和float,它会选择最不精确的值

恰恰相反;一般规则是,在执行任何算术运算之前,两个操作数都会升级为运算中涉及的两个操作数中的“最强大”类型

“最强大的”类型是根据标准称之为“常用算术转换”(C99,§6.3.1.8)的规则确定的,该规则基本上是这样说的
long-double
double
float
>所有整数类型;如果一个表达式只涉及整数类型,则会引入一些更冗长的规则(见§6.3.1.1)


现在,在您的例子中,您有一个
int
和一个
float
,“最佳”类型是
float
,因此在执行除法之前,
int
被提升为
float

代码的结果是一个float,因此它将产生一个float。当按anf int对int进行偏差时,它将返回2.5,但作为int的结果会将结果截断为2

这是因为其中一个操作数是浮点。这足以使操作成为浮点。1)因为一个操作数是浮点。2) 因为您已经编写了
float result
-为什么您希望它是其他的呢?这里的负号在哪里起作用?;)为什么您会猜测或期望除法的结果是
2.00000
?请注意,表达式的计算结果是某物,而不是返回某物。任何合理的原因都会使您认为强制使用范围较小(不一定精度较低)的类型更符合逻辑?你知道有哪种编程语言的行为是这样的吗?也许是“最强大的”->“范围更广的类型”?