鉴于是一个C代码,其中我试图弄清楚计算顺序将如何进行,我认为它应该是先3/2然后* 5或反过来。但它会产生意想不到的输出
5.000000
#include <stdio.h>
int main(void) {
// your code goes here
float a = 3/2*5;
printf("%f", a);
return 0;
}
答案 0 :(得分:7)
这是预期的。
首先计算3/2(作为整数),将其截断为1.然后乘以5。
尝试在计算中将数字转换为(浮动) - 然后您将获得预期的答案。
正如damienfrancois所建议的那样,您也可以让编译器将它们视为浮点数,如下所示:
float a = 3.0/2.0*5;
通常,如果您没有给出任何指示(例如.0或强制转换),编译器会将数字视为整数
答案 1 :(得分:4)
该行
float a = 3/2*5;
将a
计算为3乘2的整数除法,即1,然后乘以5并转换为float。
将其替换为
double a = 3.0/2.0*5;
或
float a = 3.0f/2.0f*5;
你会得到7.500000
答案 2 :(得分:1)
它将整数3除以整数2,然后乘以整数5,然后转换为浮点数。
尝试float a = 3.f/2*5;
答案 3 :(得分:0)
乘法和除法运算符在评估中具有相同的优先级。由于两个运算符都是从左到右关联的,因此首先执行整数除法(3/2),得到1,然后乘以5.乘以C语言中的运算符关联性读取
http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence