1

私は Python で Brainfuck インタープリターを作成しており、現在このコードをテストしています。

,>++++++[<-------->-],[<+>-]<.

この入力で:

43

ポーランドのウィキペディアでは、結果は 7 になるはずですが、何かが正しくありません。入力をどのように処理すればよいですか? 4 と 3 または '4' と '3' (52 と 51) として? 入力文字を整数として扱うと、結果は -41 になります。最初のループの後、[0] は -44 で [1] は 0 であり、[1] は 3 になり、その 3 を -44 に加算するため、結果は -41 になります。 .

一方、入力文字を ASCII コードとして扱う場合、最初のループの後で [0] が 4 で [1] が 0 の場合、[1] は 51 になり、その 51 を 4 に加算すると 55 になります。 (これはJavaScript インタープリターも結果 55 を返します: https://www.nayuki.io/page/brainfuck-interpreter-javascript )

ただし、Cで記述されたインタープリターをダウンロードしたところ、ウィキペディアが言ったのと同じ結果7が得られたので、混乱しています。そのインタープリターがあります: http://pastebin.com/aasxLppa、また、このインタープリターは結果7を与えます:brainfuck.tk -.-

4

1 に答える 1

7

入力は43で、バイト単位です。入力は ASCII 文字として取得されるため、値は 52 と 51 になります。

  • 最初の入力は 8 で 6 減分されるため、52 - 48 = 4 となります。

  • 2 番目の入力が最初の入力に追加されるため、4 プラス 51 = 55 になります。

  • 55 が出力に書き込まれ、それは ASCII7です。

プログラムは 2 つの ASCII 数字を合計します。

JavaScript インタープリターは完全に正しいです。のバイト値を保持する最初のレジスタを見ていました55が、出力ボックス7には ASCII 文字が表示されます。

于 2013-05-24T21:22:18.877 に答える