brainfuck是一种小型化程序语言,符合图灵完全思想
字符 | 含义 |
---|---|
> | 指针加一 |
< | 指针减一 |
+ | 指针指向的字节的值加一 |
- | 指针指向的字节的值减一 |
. | 输出指针指向的单元内容(ASCⅡ码) |
, | 输入内容到指针指向的单元(ASCⅡ码) |
[ | 如果指针指向的单元值为零,向后跳转到对应的]指令的次一指令处 |
] | 如果指针指向的单元值不为零,向前跳转到对应的[指令的次一指令处 |
,.充当输入输出
+-用于数值操作
<>用于指针操作
[]用于循环(其中执行到"["时,程序会判断当前指针所指空间是否为0,为0则终止循环,否则继续循环)
用更通俗一点的C语言来描述:
Brainfuck | C |
---|---|
> | ++ptr; |
< | --ptr; |
+ | ++*ptr; |
- | --*ptr; |
. | *ptr |
, | *ptr =getch(); |
[ | while (*ptr) { |
] | } |
当前位置清零
[-] 将当前指针的值归零
之前位置清零
[[-]<] 将当前指针以及之前的指针归零
字符I/O
,. 从键盘读取一个字符并输出到屏幕上。
简单的循环
,[.,] 这是一个连续从键盘读取字符并回显到屏幕上的循环。注意,这里假定0表示输入结束,事实上有些系统并非如此。以-1和"未改变"作为判断依据的程序代码分别是",+[-.,+]"和",[.[-],]"。
指针维护
">,[.>,] "通过移动指针保存所有的输入,供后面的程序使用。
加法
[->+<] 把当前位置的值加到后面的单元中(破坏性的加,它导致左边的单元被归零)。