需要澄清BODMAS规则

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

BODMAS或BOMDSA完全相同,因为乘法/除法和加法/减法处于同一优先级(事实上,它们应该更准确地写为BO DM AS ,在各个组中你喜欢的任何顺序); 如相关维基百科页面所述 :

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

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

 () ** * / + - 

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

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

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

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

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

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

例如:

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

好吧它只是一个术语,在数学中,它给出相同的结果,如果你+然后 – 或 – 然后+,所以是*和/。

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

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