我对计算器的理解是它们是基于堆栈的。当你使用大多数计算器时,如果你输入1 + 2 [enter] [enter],你会得到5。1被压入堆栈,+是运算符,然后2被压入堆栈。第一个[enter]应该从堆栈中弹出1和2,将它们添加到3中,然后将3推回堆栈。第二个[enter]不应该访问2,因为它实际上在任何地方都不存在。
如何保留2,以便第二个[enter]可以使用它?
是在3之前将2推回到堆栈中,还是将其保留在其他位置以供以后使用?如果它被推回到堆栈上,可以想象重复执行[operator] [number] [enter] [enter]会导致堆栈溢出吗
发布于 2010-01-13 23:02:34
从概念上讲,在硬件中,这些值被放入寄存器。在简单的ALU (算术逻辑单元(即简单的CPU))中,其中一个寄存器将被认为是累加器。您正在讨论的值可以放在堆栈中进行处理,但是一旦堆栈为空,寄存器值(包括最后一个操作)可能会被缓存到这些寄存器中。当被告知再次执行该操作时,它将使用累加器以及最后一个参数。
例如,
Reg1 Reg2 (Accumulator) Operator
Input 1 1
Input + 1 +
Input 2 2 1 +
Enter 2 3 +
Enter 2 5 +
Enter 2 7 +因此,这可能是所使用的硬件的功能。
发布于 2010-01-13 13:02:39
唯一真正基于堆栈的计算器是使用反向波兰语符号作为输入法的计算器,因为该符号直接在堆栈上操作。
发布于 2010-01-13 13:01:16
你需要做的就是保留最后一个运算符和操作数,如果堆栈是空的,就应用它们。
https://stackoverflow.com/questions/2054533
复制相似问题