关于中缀转后缀中非交换运算符-、/的技术疑问
关于后缀表达式中非交换运算符(-、/)的困惑解答
嘿,我完全get到你困惑的点了!咱们把这个问题拆解开,一步步理清楚就明白啦~
首先得牢牢记住后缀表达式(逆波兰表达式)的核心运算规则:
当遇到二元运算符时,我们会从栈中依次弹出两个操作数:先弹出的是右操作数,后弹出的是左操作数,然后用「左操作数 运算符 右操作数」的顺序计算,再把结果压回栈中。
交换运算符(+、*)因为左右操作数互换不影响结果,所以哪怕偶尔搞混顺序也不会出错,但非交换的-和/就必须严格遵守这个规则,不然结果肯定不对。
咱们用你提到的例子验证:
- 后缀表达式
4 5 –:- 先把
4压入栈,再把5压入栈 - 遇到
-,弹出栈顶的5(右操作数),再弹出4(左操作数) - 计算
4 - 5,结果是-1
对应的中缀表达式就是4 - 5,两者计算结果完全一致,并没有矛盾哦~
- 先把
你觉得“结果不一致”,大概率是不小心搞反了操作数的对应关系——比如误以为后缀4 5 –对应的中缀是5 - 4,那自然结果就对不上了。
再拿/举个例子加深理解:
- 后缀表达式
8 2 /:按照规则计算是8 / 2 = 4,对应中缀8 / 2 - 如果是后缀
2 8 /:计算就是2 / 8 = 0.25,对应中缀2 / 8
总结一下:后缀表达式里的「操作数A 操作数B 运算符」,永远对应中缀的「操作数A 运算符 操作数B」,非交换运算符必须严格遵守这个顺序,才能保证结果一致。
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

