负数中缀表达式转后缀表达式

5

如何将中缀表达式中的负数转换为后缀表达式?

假设我有一个表达式

a = - b - (-c-d)

在某些地方,我读到可以使用括号表示负数,如下:

a = (-b) - (-c-d)

但是如果这样做,我会得到一个类似于“ab-”开头的术语,这意味着a-b,是不正确的。

那么我该如何进行转换呢?


为什么这被标记为 c - melpomene
你使用的是哪种后缀表示法? - melpomene
我假设你正在存储变量的值。尝试将数字存储为负数,但在字符数组中显示操作为正号(+)。 - Shaun F
“(-c-d)”是指“((-c) - d)”吗?如果是这样,我就不理解这个问题了。还是它的意思是“-c x d”?如果是这样,那么这个问题就不应该被标记为[C],而应该被视为数学问题而不是编程问题。 - Clifford
如果我这样做,我会得到一个类似于“ab-...”的术语。哎!那个a从哪里来的? - Clifford
1个回答

16
在中缀表示法中,您必须区分二元减法运算符sub和一元否定运算符neg。两者都由减号表示,但上下文可以告诉您哪个是哪个。
当减号在表达式开头、开括号后或二元运算符后面时,您将得到一个negation
    − (x + y)   →   x y add neg
    4 × − x   →   4 x neg mult
    2 × (− x + y)   →   2 x neg y add mult 当减号在闭括号后或符号(即变量或数字)后时,您将得到一个subtraction
    1 −x   →   1 x sub
    (4 ∗x) −1   →   4 x mult 1 sub 请注意,一元运算符neg只将一个参数从堆栈中取出。如果要坚持使用二元运算符,则可以在第二个操作数之前推入零,并使用二元sub

    − (x + y)   →   0,其中 x y 分别表示两个待计算的数,addsub 分别表示加法和减法操作

    4 x neg mult   →  4 0 x sub mult,其中 x 表示待计算的数,negmult 分别表示取负和乘法操作

    2 x neg y add mult   →   2 0 x sub y add mult,其中 x y 分别表示待计算的两个数,negaddmult 分别表示取负、加法和乘法操作

最后,对于一元加号,您可以忽略它:

    + x   →   x
    + (x + y)   →   x y add


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接