brainfuck

发布于 2019-02-15  882 次阅读


brainfuck是一种小型化程序语言,符合图灵完全思想

字符 含义
> 指针加一
< 指针减一
+ 指针指向的字节的值加一
- 指针指向的字节的值减一
. 输出指针指向的单元内容(ASCⅡ码)
, 输入内容到指针指向的单元(ASCⅡ码)
[ 如果指针指向的单元值为零,向后跳转到对应的]指令的次一指令处
] 如果指针指向的单元值不为零,向前跳转到对应的[指令的次一指令处

,.充当输入输出
+-用于数值操作
<>用于指针操作
[]用于循环(其中执行到"["时,程序会判断当前指针所指空间是否为0,为0则终止循环,否则继续循环)

用更通俗一点的C语言来描述:

Brainfuck C
> ++ptr;
< --ptr;
+ ++*ptr;
- --*ptr;
. *ptr
, *ptr =getch();
[ while (*ptr) {
] }

当前位置清零
[-] 将当前指针的值归零

之前位置清零
[[-]<] 将当前指针以及之前的指针归零

字符I/O
,. 从键盘读取一个字符并输出到屏幕上。

简单的循环
,[.,] 这是一个连续从键盘读取字符并回显到屏幕上的循环。注意,这里假定0表示输入结束,事实上有些系统并非如此。以-1和"未改变"作为判断依据的程序代码分别是",+[-.,+]"和",[.[-],]"。

指针维护
">,[.>,] "通过移动指针保存所有的输入,供后面的程序使用。

加法
[->+<] 把当前位置的值加到后面的单元中(破坏性的加,它导致左边的单元被归零)。


CTFer|NOIPer|CSGO|摸鱼|菜鸡