1

我正在用 Python 编写 Brainfuck 解释器,目前正在测试这段代码:

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

使用此输入:

43

波兰语 Wikipedia 说结果应该是 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,与 Wikipedia 告诉的一样......所以我很困惑。有那个解释器:http://pastebin.com/aasxLppa,这个解释器也给出结果7:brainfuck.tk -.-

4

1 回答 1

7

输入是43,作为字节。输入被视为 ASCII 字符,因此值为 52 和 51。

  • 第一个输入递减 8、6 倍,因此 52 - 48 = 4。

  • 第二个输入与第一个输入相加,因此 4 加 51 = 55。

  • 55 被写入输出,即 ASCII 7

该程序将两个 ASCII 数字相加。

JavaScript 解释器是完全正确的。您正在查看第一个寄存器,它保存 的字节值55,但输出框显示7ASCII 字符。

于 2013-05-24T21:22:18.877 回答