下面的代码片段来自维基百科,是标准Hello的序言!在Brainfuck的节目。
1. +++++ +++++ initialize counter (cell #0) to 10
2. [ use loop to set the next four cells to 70/100/30/10
3. > +++++ ++ add 7 to cell #1
4. > +++++ +++++ add 10 to cell #2
5. > +++ add 3 to cell #3
6. > + add 1 to cell #4
7. <<<< - decrement counter (cell #0)
8. ]我理解这里发生的事情的要点,但我不理解的是第3行到第6行所发生的事情的机制。如果+++++ +++++将a[0]中的值增加了10,为什么将指针增加1并执行7次++*ptr会导致a[1]相等于70?a[1] = 7不应该吗?似乎a[1]通过a[4]被神奇地增加了10倍,我不明白为什么。
发布于 2014-01-08 19:22:21
[]字符表示一个循环。它之前的10个+表示循环将运行多少次。当您了解各种命令的含义和<<<< -命令序列时,这一点就变得很清楚了。
每次循环运行时,它都执行以下步骤:
> move the pointer 1 space to the right
+++++ ++ add 7 to the current pointer
etc 3 more times > > >
<<<< - move back to the counter and decrement这样做的效果是添加"7,10,3,1“10倍。换句话说,如果在运行循环时在前5个指针位置写入值,就像它们在数组中一样:
[10, 0, 0, 0, 0] at first
[9, 7, 10, 3, 1] after first run
[8, 14, 20, 6, 2] after second
...
[0, 70, 100, 30, 10] up to this, the loop ends since the counter is 0,
and control continues发布于 2015-05-05 20:45:40
这个站点上有一个很好的brainfuck可视化工具:http://fatiherikli.github.io/brainfuck-visualizer/,它使brainfuck语言更容易理解。
发布于 2016-12-26 16:55:15
++++++++++使cell0等于10,然后[启动一个循环。在循环中,每次迭代都向其他单元格添加一个集合号。例如,每次将7添加到单元格中。循环的最后一行,<<<< -将指针放回cell0并递减它。这样,每次迭代都会减少cell0的数量。当它达到0时,循环停止,程序继续运行。因此,它将7添加到cell1 10次,这个循环使cell1 = 10*7。
https://stackoverflow.com/questions/21004459
复制相似问题