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;while (cin >> c) {cout << translate(c);if (c != '[')cout << ";\n";}return 0;
} 

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

void run()
{char arr[1000] = { 0 };char* p = arr+500;//input code
}int main()
{run();freopen("D:/out.txt", "w", stdout);char c;while (cin >> c) {cout << translate(c);if (c != '[')cout << ";\n";}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语言

Brainfuck语言入门相关推荐

  1. 写一篇C语言入门第一讲

     嗨~大家好~  我是小白,最近才使用这个博客,我是一个计算机系的学生,我会在这里发一些我给我们班其他同学讲C语言入门的博文,希望大家能共享这些资料,当然了,我也很希望大家给我提出好的意见或建议.(P ...

  2. C语言入门练习 - 第二期 判断语句与循环语句(题解)

    比赛地址:C语言入门练习 - 第二期 判断语句与循环语句 A.入门--基础语法(for) #include<stdio.h> int main(){int n,i;scanf(" ...

  3. 计算机书籍-Go语言入门经典SAMS Teach Yourself

    书名:Go语言入门经典 作者:[英]乔治 奥尔波(George Ornbo) 出版社:人民邮电出版社 出版时间:2018年08月 去当当网了解

  4. c语言中描述y是奇数,4章选择结构程序设计C语言入门习题

    C语言入门习题 第四章 选择结构程序设计 一.选择题 1.有以下程序 main() { int i=1,j=2,k=3; if(i++==1&&(++j==3||k++==3)) pr ...

  5. C#forUnity快速入门(连载2)-C#语言入门

     C# for Unity 编程语言快速入门教程(连载2)---C#语言入门 接上篇内容,我们把更多的C#语言入门级编程习题发布如下,希望能够对C#编程小白提高技能有帮助. 三:  学习循环语句(续) ...

  6. python终结一个循环额_Python语言入门之内存管理方式和垃圾回收算法解析

    本文主要向大家介绍了Python语言入门之内存管理方式和垃圾回收算法解析,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 在列表,元组,实例,类,字典和函数中存在循环引用问题.有 ...

  7. VML编程之------VML语言入门《VML极道教程》原著:沐缘华

    <VML极道教程>原著:沐缘华 1章4节:VML语言入门 1:VML语言入门 - 极道学法 在我正式开始讲解.你正式开始学习VML语言以前,请务必遵循以下规则,可以达到最佳效果.极道学习方 ...

  8. c++ 结构体赋值_《零基础看得懂的C语言入门教程》—(十二)结构体是这么回事

    一.学习目标 了解C语言的结构体的使用方法 了解C语言结构体的结构的赋值 了解多种C语言结构体变量的赋值方法和取值方法 目录 <零基础看得懂的C语言入门教程>--(二)简单带你了解流程 & ...

  9. c语言作业ppt模板,C语言入门教学PPT模板

    目前要说发展前景最好的行业,那么就必然是互联网行业了,大部分行业现在都离不开计算机,也就是说学好计算机,走到哪里都不怕,特别是程序员,那么C语言就是首先需要接触的.本模板是由西西为大家整理的C语言入门 ...

最新文章

  1. 转载 mysql 数据库优化配置实例
  2. C++一维数组和指针的关系总结
  3. tars框架php,TarsPHP: TARS-PHP是针对php使用tars二进制协议,以及tars平台整体运维、RPC等一系列能力的解决方案...
  4. [css] 你有没有使用过“形似猫头鹰”(例:`* + *{ ... }`) 的选择器?
  5. 互联网晚报 | 3月3日 星期四 |​ 苹果将于北京时间3月9日凌晨2点举办春季发布会;vivo子品牌NEX被砍掉...
  6. web of science上查找相关会议和期刊的论文
  7. java简单租车系统 慕课手记_Java租车系统(新手)
  8. Tableau 10.5 安装教程
  9. IPv6规模部署及专项督查工作全国电视电话会议
  10. 《Python编程从入门到实践 第二版》第十六章练习
  11. linux 执行 ktr脚本,kettle在linux下面用于shell脚本执行:转换或者作业
  12. 非专业python学多久_非的解释|非的意思|汉典“非”字的基本解释
  13. 【站内题解】十六道csdn每日一练Python题解
  14. 七彩虹将星 X15 AT 2023 参数配置 七彩虹将星 X15 AT 评测
  15. S3C6410启动方式
  16. Wind River workbench小结
  17. Sunday算法java实现
  18. css样式内联式,外联式,嵌入式
  19. 软考的网络工程师对就业有用吗?
  20. STM32开发日记001:ARM和单片机之间的关系

热门文章

  1. Win11 的这 19 个新功能,你都用上了吗?
  2. [计算几何] [BZOJ4246] 两个人的星座
  3. 内行人看笑话 外行人一脸懵逼
  4. The server time zone value ‘锟叫癸拷锟斤拷\u05FC时锟斤拷‘ is unrecognized or represents more than one time zone
  5. 队爷的讲学计划 (强连通缩点+最短路)
  6. 基于Laravel开发的Diy手机壳在线定制系统源码
  7. SELECT数据查询例题4——分组查询
  8. pdf插入图片到指定坐标位置 亲测可用
  9. html class生效顺序,HTML5 CSS3小猪日历(动物挂历)
  10. 第九周 作业管理系统成本估算