乘除运算括号优先级:C语言与BODMAS规则的正确顺序疑问
C语言表达式括号优先级的正确写法
原表达式:
j=2 * 3 / 4 + 2.0 / 5 + 8 / 5;
两种括号添加方式:
- 遵循BODMAS规则的写法:
j=(2 * (3 / 4)) + (2.0 / 5) + (8 / 5); // 此时j = 0
- 按照C语言运算符优先级的写法:
j=((2 * 3) / 4) + (2.0 / 5) + (8 / 5); // 此时j = 2
结论:按照C语言运算符优先级添加括号的顺序是正确的
原因说明:
C语言中,乘法*和除法/属于同一优先级,且遵循左结合原则(即从左到右依次计算)。因此2 * 3 / 4会先计算2*3得到6,再计算6/4(整数除法结果为1)。
BODMAS规则中“除法优先于乘法”的逻辑并不适用于C语言,C语言对同优先级的乘除运算统一按左结合处理,而非先除后乘。
计算验证:
- 按C语言规则计算:
((2*3)/4)=1,2.0/5=0.4,8/5=1,总和为1+0.4+1=2.4,若j为整数类型会自动截断为2,与注释结果一致。 - 按BODMAS规则计算:
2*(3/4)=0,剩余两项和为1.4,总和1.4截断后为0,但这不符合C语言的实际运算逻辑。
内容的提问来源于stack exchange,提问作者taurus05
相关产品推荐
相关产品推荐

