我是编译器世界中的新生^ _ ^我想知道堆栈中的合法代表负数。
例如:
中缀:1-5 = -4后缀:15 -
陈述是:
push(1)
push(5)
x=pop()
y=pop()
t=sub(y,x)
push(t)
堆栈中的最终结果将是(-4)
如果它是合法的,我该如何表示?
谢谢^ _ ^
答案 0 :(得分:2)
是。负数存储在内存中的Two's complement form中,因此您无需在堆栈上添加额外的单元格。
答案 1 :(得分:1)
如果你指的是以文本方式表示表达式(可能在你的程序读入的文件中),那么你可能会为你的表达式定义一些语法规则 - 比如用空格分隔标记
例如,后缀中的444 /与中缀中的(4/44)或(44/4)或(4 /(4/4))相同吗?您需要某种方式来分隔多位数字。
现在,假设您决定使用空格,您可以制定一个规则,即负整数将是一个减号,后跟一系列数字而没有任何分隔的空格
所以中缀表达式'-1 *(3 ^( - 4) - 7'可能变成'-1 3 -4 ^ * 7 - '
这是你在找什么?
PS - 使用适当的解析器,您实际上可以在没有空格的情况下为运算符执行此操作,但您仍需要将操作数彼此分开。
答案 2 :(得分:0)
如果你谈论一个堆栈,你谈论抽象数据类型。只要你有一个推/弹功能,它就会把你放入堆栈的内容没有区别
答案 3 :(得分:0)
首先请注意,短划线' - '用作减法运算符和负号之间存在差异。虽然我们使用相同的字符,但它们有不同的含义。
正整数和负整数(如-4)只占用堆栈中的一个插槽。
如果你的postifx语言只能采用单位数整数和算术运算符,你可以通过从零减去来表示负数:
04-2 +
这相当于中缀符号
0-4 + 2
这是一些术语:减法运算是一个“二元运算符”,即它需要两个操作数;负号是“一元运算符”,也就是说,它需要一个操作数。 Infix和postfix是二元运算符及其操作数的符号。