| 符号 | 功能 | 说明 |
|---|---|---|
+ | 数值+1 | 当前单元格(内存格)+1并变绿。 |
- | 数值-1 | 当前单元格-1并变黄。 |
< | 指针左移 | 单元格左移一格。 |
> | 指针右移 | 单元格右移一格。 |
[ | 循环开始 | 如果当前单元格数值为0,跳转至对应的]之后。 |
] | 循环结束 | 如果当前单元格数值不为0,跳回对应的[处。 |
. | 输出 | 直接输出当前单元格的十进制数值。 |
Brainfuck 是一种极简的编程语言,由 Urban Müller 于 1993 年设计。
它的语法只有 8 个有效指令:>、<、+、-、
.、,、[、]。
虽然语法非常简单,但它是图灵完备的,也就是说理论上可以表达任何可计算的程序。
Brainfuck 程序运行时通常有一条内存带,可以想象成很多连续排列的小格子。
每个格子里保存一个数字,程序有一个“指针”指向当前正在操作的格子。
> 和 < 用来移动指针,
+ 和 - 用来改变当前格子的数值,
. 用来输出当前格子的内容,
[ 和 ] 则用来实现循环。
由于 Brainfuck 的指令非常少,写起来并不直观,所以它常被用作教学、娱乐、代码挑战或展示计算机底层执行过程。 这个可视化工具可以帮助你观察指针移动、内存数值变化以及循环跳转过程,从而更容易理解 Brainfuck 程序是如何一步步运行的。
此程序取消了常见Brainfuck编译器中单元格最大值只有256并且只能输出ASCII字符的限制,因此可用于大数挑战。 记BF(n)为n个能停机的Brainfuck符号所能输出的最大数,它的增长速度应近似于BB(n)。
我们有:
BF(15)>=16 ++++[>++++<-]>.
BF(30)>=256 >+>++++[<[<++>-]<[>++<-]>>-]<.
BF(45)>=2^^9-2 ++++++++[>+[>+[>++<-]>[<+>-]<<-]>[<+>-]<<-]>.
BF(89)>F_{w+1}(2^^^6-2)>葛立恒数 +++[->>>+[-<<+>>]<<[->>>+<+[-[>[[->+<]<[->>>+<<<]>>>[-<<+<+>>>]<-]<<-]>[-<++>]<<]<]<]>>>.