首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算器堆栈

计算器堆栈
EN

Stack Overflow用户
提问于 2010-01-13 12:59:18
回答 4查看 5.9K关注 0票数 2

我对计算器的理解是它们是基于堆栈的。当你使用大多数计算器时,如果你输入1 + 2 [enter] [enter],你会得到51被压入堆栈,+是运算符,然后2被压入堆栈。第一个[enter]应该从堆栈中弹出12,将它们添加到3中,然后将3推回堆栈。第二个[enter]不应该访问2,因为它实际上在任何地方都不存在。

如何保留2,以便第二个[enter]可以使用它?

是在3之前将2推回到堆栈中,还是将其保留在其他位置以供以后使用?如果它被推回到堆栈上,可以想象重复执行[operator] [number] [enter] [enter]会导致堆栈溢出吗

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-01-13 23:02:34

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

例如,

代码语言:javascript
复制
                    Reg1     Reg2 (Accumulator)  Operator
Input 1                         1
Input +                         1                  +
Input 2               2         1                  +
Enter                 2         3                  +
Enter                 2         5                  +
Enter                 2         7                  +

因此,这可能是所使用的硬件的功能。

票数 4
EN

Stack Overflow用户

发布于 2010-01-13 13:02:39

唯一真正基于堆栈的计算器是使用反向波兰语符号作为输入法的计算器,因为该符号直接在堆栈上操作。

票数 4
EN

Stack Overflow用户

发布于 2010-01-13 13:01:16

你需要做的就是保留最后一个运算符和操作数,如果堆栈是空的,就应用它们。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2054533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档