2

電卓についての私の理解は、それらがスタックベースであるということです。ほとんどの電卓を使用する場合、入力すると。が表示され1 + 2 [enter] [enter]ます51はスタックにプッシュされ、+はオペレーターであり、次に2スタックにプッシュされます。1つ目はスタック[enter]をポップ1して2オフにし、それらを追加して取得してからスタックに3プッシュ3バックする必要があります。2番目は事実上どこにも存在しないため、に[enter]アクセスするべきではありません。2

2人目が使用できるようにどのように2保持され[enter]ますか?

2前にスタックにプッシュバックされますか、3それとも後で使用するために別の場所に保持されますか?スタックにプッシュバックされた場合、繰り返し実行することでスタックオーバーフローを引き起こす可能性があります[operator] [number] [enter] [enter]か?

4

4 に答える 4

4

唯一の真のスタックベースの計算機は、入力方法として逆ポーランド記法を使用する計算機です。これは、その記法がスタックを直接操作するためです。

于 2010-01-13T05:02:39.013 に答える
4

概念的には、ハードウェアではこれらの値がレジスタに入れられます。単純な ALU (算術論理ユニット (つまり、単に CPU)) では、レジスタの 1 つがアキュムレータと見なされます。議論している値は処理するためにスタックに置くことができますが、スタックが空になると、レジスタ値 (最後の操作を含む) がこれらのレジスタにキャッシュされる場合があります。操作を再度実行するように指示された場合、アキュムレータと最後の引数を使用します。

例えば、

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

したがって、使用されているハードウェアの機能である可能性があります。

于 2010-01-13T15:02:34.243 に答える
2

最後の演算子とオペランドを保持し、スタックが空の場合はそれらを適用するだけです。

于 2010-01-13T05:01:15.793 に答える
0

ウィキペディアには、 Shunting-yard アルゴリズム (infix -> rpn 変換)の優れた説明とチュートリアルがあります。

于 2010-01-13T05:18:06.410 に答える