代码之家  ›  专栏  ›  技术社区  ›  Dinah SLaks

计算器堆栈

  •  2
  • Dinah SLaks  · 技术社区  · 16 年前

    我对计算器的理解是它们是基于堆栈的。当你使用大多数计算器时,如果你输入 1 + 2 [enter] [enter] 你得到 5 . 1 被推到堆栈上, + 那么是接线员吗? 2 被推到堆栈上。第一 [enter] 应该流行 从堆栈中,将它们添加到 3 然后推 回到堆栈上。第二 [进入] 不应该访问 因为它实际上不存在于任何地方。

    如何 保留以便第二个 [进入] 能用吗?

    还是保留在其他地方供以后使用?如果它被推回到堆栈上,那么您是否可以通过重复执行操作而导致堆栈溢出? [operator] [number] [enter] [enter] ?

    4 回复  |  直到 12 年前
        1
  •  4
  •   Dinah SLaks    16 年前

    从概念上讲,在硬件中,这些值被放入寄存器。在简单的ALU(算术逻辑单元(即简单的CPU))中,其中一个寄存器将被视为一个累加器。您正在讨论的值可以放在堆栈上进行处理,但是一旦堆栈为空,寄存器值(包括最后一个操作)可以缓存在这些寄存器中。当被告知再次执行该操作时,将使用累加器和最后一个参数。

    例如,

                        Reg1     Reg2 (Accumulator)  Operator
    Input 1                         1
    Input +                         1                  +
    Input 2               2         1                  +
    Enter                 2         3                  +
    Enter                 2         5                  +
    Enter                 2         7                  +
    

    因此,它可能是所用硬件的一个功能。

        2
  •  4
  •   Yann Ramin    16 年前

    唯一真正的基于堆栈的计算器是以逆波兰符号作为输入方法的计算器,因为该符号直接作用于堆栈。

        3
  •  2
  •   Ignacio Vazquez-Abrams    16 年前

    您只需要保留最后一个运算符和操作数,并在堆栈为空时应用它们。

        4
  •  0
  •   Anh    12 年前
    推荐文章