java - 需要澄清 BODMAS 规则

标签 java c++ c math

<分区>

BODMAS规则中的运算顺序是括号、顺序、除法、乘法加减法。这里除法、乘法、加法、减法是按照递减、递增、递增、递减的顺序。BODMAS规则系列不遵循相同的顺序顺序。我的问题是为什么加法之后是减法而不是减法之后是加法。

最佳答案

BODMAS 或 BOMDSA 完全相同,因为乘法/除法和加法/减法具有相同的优先级(事实上,它们应该更正确地写为 B O DM AS,无论在各个组中您喜欢的顺序);正如相关Wikipedia page所说:

These mnemonics may be misleading when written this way, especially if the user is not aware that multiplication and division are of equal precedence, as are addition and subtraction.

换句话说,您缺少的是正常情况下(无论是“手动”计算还是使用任何理智的编程语言),运算符实际上按优先级分组,其中乘法和除法具有相同的优先级(以及加法和减法)。所以,你的“BODMAS 规则”实际上是:

() 
**
* /
+ - 

(我使用 ** 作为求幂运算符——就像在 Python 中一样——因为 Java 没有提供;另外,() 这里是分组符号,而不是运算符)

同一行上运算符的优先级由它们在表达式中的顺序和它们的结合性决定(对于算术运算符,它是从左到右,尽管对于求幂运算没有明确定义)。

尽管对于实数数学来说这并不真正相关,除非谈论除法(加法和减法是关联的,如果您将减法视为“相反的加法”),但在编程中它是双重重要的,因为 FP 数和整数上的数学通常不相关。

此外,编程语言提供了更多的运算符,而不是结合/交换运算符,它们具有不同的结合性,而且优先级规则也不是很完善,因此它们以更精细的方式指定运算符优先级规则是正常的。

例如参见 operator precedence and associativity table of Java : 它比简单的“BODMAS 规则”复杂得多,这不足以正确表达它(因为有很多类,每个类中有更多的运算符,具有不同关联性的类,...)。

关于java - 需要澄清 BODMAS 规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15849990/

相关文章:

c++ - 这段代码是什么意思?打开简历

c++ - 无法访问派生类中基类的 protected 成员

java - java.util.concurrent.BrokenBarrierException 的原因

java - 如何(完全)将 json 反序列化为通用列表?

c++ - Linux中共享对象和普通库的区别

c - 二维数组在没有被操纵的情况下丢失值?

c - 在单链表的开头插入节点

C <地址 0x53 越界> 错误

java - 使用 fragment 的最佳实践

java - GWT 定义最小页面宽度