C中的浮点除法动作怪异?

C中的浮点除法动作怪异?,c,C,我想这是一个简单的问题,但我只是偶然发现了这个问题: float y=2+2/3; 输出:2 为什么浮动不能处理2/3? 我猜float将2/3解释为整数。 但为什么一开始它接受2呢?那是整数除法。你基本上是在计算: float y = 2 + (2 / 3); float y = 2 + (0 ); float y = 2; 尝试: 只是打字,它也会工作。是的,我就是这么想的,但是为什么它允许整数,比如2,而不是2/3?这只是除法吗?或者乘法和模运算也会发生同样的情况吗?这个。C从

我想这是一个简单的问题,但我只是偶然发现了这个问题:

float y=2+2/3; 
输出:
2

为什么浮动不能处理2/3? 我猜float将2/3解释为整数。
但为什么一开始它接受2呢?

那是整数除法。你基本上是在计算:

float y = 2 + (2 / 3);
float y = 2 + (0    );
float y = 2;
尝试:


只是打字,它也会工作。

是的,我就是这么想的,但是为什么它允许整数,比如2,而不是2/3?这只是除法吗?或者乘法和模运算也会发生同样的情况吗?这个。C从右到左读取行,所以在计算完成之前,它不知道它应该是浮点。@Joel是的,乘法和模也是如此。@jpa和Tim,thx!去考试吧!今天早上我注意到一件小事。
=
的左手操作数的类型与计算
=
右侧所有子表达式时使用的类型无关。它只告诉在所有计算完成后,存储最终结果的类型。
float y = 2 + 2.0 / 3;
float y = 2 + (float)2 / 3;