0

关于反向波兰符号的快速问题。

Why is 2*3/(2-1)+5*(4-1)?: (original)

23*21-/541-*+ 

rather than 23*21-/5+41-*?

我只是在混淆自己。就我个人而言,我会在原始问题中添加额外的括号,以明确添加 5 的位置。如果它不存在,我假设它按什么顺序进入?

谢谢

4

2 回答 2

1

如果我们假设一个传统的操作顺序,那么任何乘法都会在任何加法之前计算。因此,当您有 y+x*z 时,首先根据通常的操作顺序计算 x*z。更明确地说,y+x*z 表示 (y+(x*z))。因此,2*3/(2-1)+5*(4-1) 表示 (((2*3)/(2-1))+(5*(4-1)))。

如果您要预先明确说明您将运算顺序规定为在乘法之前发生的加法,那么如果您写 4+5*6,则意味着 ((4+5)*6)。如果你这样做了,那么你可以将分配律表述为 x*y+z=(x*y)+(x*z)。当你省略操作时,表达式意味着什么?考虑 xy&z,其中 & 是二进制的,xy 的二进制运算被省略。如果省略的二元运算是 *,而 & 是 +,那么这意味着表达的运算 & 将发生在抑制的乘法运算之前。通常,省略的操作被假定首先发生。因此,如果您的加法比乘法具有绑定优先级,那么像 xy 这样的表达式表示 x+y 而不是更常见的 x*y 可能是有意义的。原则上,让加法发生在乘法之前似乎没有错,只要你声明你想预先做这件事并坚持这个约定及其在你所写的任何内容中的含义。综上所述,除了与不懂 RPN 或 PN 的人交流外,我根本不明白为什么你在了解 RPN 和 PN 后会用中缀表示法写作。

于 2013-06-12T03:15:57.097 回答
1

这是因为乘法的优先级高于加法。当您没有大括号时,首先将 5(only) 乘以 (4-1) 并添加到表达式的其余部分。当您没有使用大括号时,它仅根据优先顺序进行评估。

于 2015-09-19T05:28:53.197 回答