Brainfuck语言入门

Brainfuck语言(简称BF)是一种非常接近图灵机的编程语言。

本文既是BF的详细介绍和工具,也是我学习BF的全过程记录。

目录

一,指令

二,翻译成C/C++

三,打印A

四,BF的归0操作

五,打印Hello World!

六,编程实战

七,Brainfuck语言 解释器

八,Brainfuck语言 未定义行为

九,好用的工具

十,BF系列语言


一,指令

BF只有8种有效字符,其实就是8种指令:

字符

含义

>

指针加一

<

指针减一

+

指针指向的字节的值加一

-

指针指向的字节的值减一

.

输出指针指向的单元内容(ASCⅡ码)

,

输入内容到指针指向的单元(ASCⅡ码)

[

如果指针指向的单元值为零,向后跳转到对应的]指令的次一指令处

]

如果指针指向的单元值不为零,向前跳转到对应的[指令的次一指令处

这里的指针都是指向一个8位的整数,即char,加减法的溢出规则也是和char型整数的溢出规则一致

纸带是双向的,和图灵机保持一致

二,翻译成C/C++

BF可以简单的翻译成C/C++语言:

把BF转换成C++代码的C++代码:

string translate(char c)
{
    switch (c)
    {
    case '>':
        return "p++";
    case '<':
        return "p--";
    case '+':
        return "*p = *p + 1";
    case '-':
        return "*p = *p - 1";
    case '.':
        return "cout<<char(*p)";
    case ',':
        return "*p=getchar()";
    case '[':
        return "while(*p){";
    case ']':
        return "}";
    default:
        return "";
    }
}


int main()
{
    char c;
    string s;
    while (cin >> c) {
        s+= translate(c);
        if (c != '[')s+= ";\n";
    }
    cout << s;
    return 0;
}

然后,我们只需要加几行代码,就可以直接执行上述C++代码

void run()
{
    char arr[1000] = { 0 };
    char* p = arr+500;
    //input code
}

int main()
{
    run();
    return 0;
} 

三,打印A

先看看怎么打印A,即char(65)

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

运行第一次(翻译):

运行第2次(执行):

四,BF的归0操作

要把一个位置上的数变成0,BF代码也很简单:

[-]

把当前位置和前面相邻的非0值全部变成0:

[[-]<]

五,打印Hello World!

有了打印一个字符的经验和归0操作,接下来就可以输出任意字符了:

Ascii码分别是72,101,108,108,111,32,87,111,114,108,100,33

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

六,编程实战

Brainfuck语言实战

七,Brainfuck语言 解释器

Brainfuck语言 解释器_csuzhucong的博客-CSDN博客

八,Brainfuck语言 未定义行为

Brainfuck语言 未定义行为_csuzhucong的博客-CSDN博客

九,好用的工具

https://fatiherikli.github.io/brainfuck-visualizer/

这个网页可以贴自己的BF代码执行,可以输入输出,还可以看到可视化的运行过程,挺好用的。

十,BF系列语言

BF系列语言_csuzhucong的博客-CSDN博客_bf语言

  • 17
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Brainfuck,是一种极小化的计算机语言,它是由Urban Müller在1993年创建的。由于fuck在英语中是脏话,这种语言有时被称为brainf*ck或brainf***,甚至被简称为BF。 【内含:BF解释器,BF解释器源码,BF写的几个小程序】 ReadMe: Brainfuck 编程语言 [图灵完全] [8条指令] 语法: > 指针加一 < 指针减一 + 指针指向的字节的值加一 - 指针指向的字节的值减一 . 输出指针指向的单元内容(ASCII码) , 输入内容到指针指向的单元(ASCII码) [ 如果指针指向的单元值为零,向后跳转到对应的]指令的次一指令处 ] 如果指针指向的单元值不为零,向前跳转到对应的[指令的次一指令处 特性: 8KB 环状内存(初始化为0) <>操作不会越界 加减操作环状 +-操作不会溢出(0xFF + 为 0x00) 文件说明: bf.exe 解释器 Usage: bf [-options] source where options include: -b buffered input (default mode) 缓冲输入(按回车才输入,默认) -i not buffered input 无缓冲输入 -e not buffered input without echo 无缓冲输入且不回显 bf.cpp 解释器的源代码(纯C实现) hello.txt HelloWorld程序 up.txt 这个程序将你的输入(小写字母)转换为大写(回车结束) add.txt 这个程序对两个一位数做加法,并输出结果(如果结果也只有一位数的话)(例如:输入2+3) mul.txt 这个程序对两个一位数做乘法,并输出结果(如果结果也只有一位数的话)(例如:输入2*3) factor.txt 这个程序分解多位数的因子,并输出结果(例如:输入1000) numwarp.txt 这个程序输入 ()-./0123456789abcdef 和空格的字符串,显示很有趣的排列结果(例如:输入520 1314) prime.txt 这个程序输入一个多位整数,输出从1到这个整数间的所有素数(例如:输入100) quine.txt 这个程序输出源代码本身 [以上程序,基本上依靠回车确认]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值