关于反向波兰符号的快速问题。
Why is 2*3/(2-1)+5*(4-1)?: (original)
23*21-/541-*+
rather than 23*21-/5+41-*?
我只是把自己弄糊涂了。就我个人而言,我会在原来的问题中添加额外的括号,以明确添加5的位置。如果它不在那里,我该假设它的顺序是什么?
谢谢
如果我们假设一个常规的运算顺序,那么任何乘法都在任何加法之前计算。所以,当你有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,你还要用中缀符号来写。
这是因为乘法的优先级高于加法。当没有大括号时,首先将5(only)与(4-1)相乘,并将其添加到表达式的其余部分。