需要澄清BODMAS规则

时间:2013-04-06 10:53:34

标签: java c++ c math

在BODMAS规则中,操作的顺序是括号,顺序,除法,乘法加法和减法。除法,乘法,加法和减法遵循递减,递增,递增和递减顺序.BODMAS规则系列不遵循相同的规则。 order.And我的问题是为什么加法后跟减法,但不减法后跟加法。

3 个答案:

答案 0 :(得分:7)

BODMAS或BOMDSA完全相同,因为乘法/除法和加法/减法处于同一优先级(事实上,它们应该更正确地写为B O DM AS,无论你喜欢哪种顺序各种团体);正如相关Wikipedia page所述:

  

这些助记符在以这种方式编写时可能会产生误导,特别是如果用户不知道乘法和除法具有相同的优先级,加法和减法也是如此。

换句话说,你所缺少的是通常(在“手动”和任何理智的编程语言中进行数学运算时)运算符实际上按优先级的进行分组,其中乘法和除法具有相同的优先级(以及和和减法)。所以,你的“BODMAS规则”实际上实际上是:

() 
**
* /
+ - 

(我使用**作为指数运算符 - 就像在Python中一样 - 因为Java没有提供一个;而且,()这里是分组符号,而不是运算符)

运算符在同一行上的优先级取决于它们在表达式中的顺序及其相关性(对于算术运算符,它是从左到右,但是对于求幂没有很好地定义)。

虽然对于实数上的数学,除非谈论除法(加法和减法是关联的,如果你认为减法是“相反的加法”),这并不是真正相关的,在编程中双重要因为关于FP数和整数的数学通常不是关联的。

此外,编程语言提供了更多的运算符,而不是关联/可交换的,具有不同的关联性和不太完善的优先级规则,因此他们以更精确的方式指定运算符优先级的规则是正常的。

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

答案 1 :(得分:1)

在Java中,奇怪的是,减法和加法都是加法。减法只是添加一个负数。

例如

int x = 1;
int y = 2;
int z = x - y; // Is actually x + (-y)

答案 2 :(得分:0)

它只是一个术语,在数学中,如果你+然后 - 或 - 然后+它给出相同的结果,那么对于*和/。

(x - y) = (-y + x) And (x*y)/z = x*(y/z) And x-y*z = x-(y*z) = -(y*z)+x

唯一重要的是,你必须计算*,/之前的+, - 对应于它们所在的括号。