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;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语言入门相关推荐
- 写一篇C语言入门第一讲
嗨~大家好~ 我是小白,最近才使用这个博客,我是一个计算机系的学生,我会在这里发一些我给我们班其他同学讲C语言入门的博文,希望大家能共享这些资料,当然了,我也很希望大家给我提出好的意见或建议.(P ...
- C语言入门练习 - 第二期 判断语句与循环语句(题解)
比赛地址:C语言入门练习 - 第二期 判断语句与循环语句 A.入门--基础语法(for) #include<stdio.h> int main(){int n,i;scanf(" ...
- 计算机书籍-Go语言入门经典SAMS Teach Yourself
书名:Go语言入门经典 作者:[英]乔治 奥尔波(George Ornbo) 出版社:人民邮电出版社 出版时间:2018年08月 去当当网了解
- c语言中描述y是奇数,4章选择结构程序设计C语言入门习题
C语言入门习题 第四章 选择结构程序设计 一.选择题 1.有以下程序 main() { int i=1,j=2,k=3; if(i++==1&&(++j==3||k++==3)) pr ...
- C#forUnity快速入门(连载2)-C#语言入门
C# for Unity 编程语言快速入门教程(连载2)---C#语言入门 接上篇内容,我们把更多的C#语言入门级编程习题发布如下,希望能够对C#编程小白提高技能有帮助. 三: 学习循环语句(续) ...
- python终结一个循环额_Python语言入门之内存管理方式和垃圾回收算法解析
本文主要向大家介绍了Python语言入门之内存管理方式和垃圾回收算法解析,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 在列表,元组,实例,类,字典和函数中存在循环引用问题.有 ...
- VML编程之------VML语言入门《VML极道教程》原著:沐缘华
<VML极道教程>原著:沐缘华 1章4节:VML语言入门 1:VML语言入门 - 极道学法 在我正式开始讲解.你正式开始学习VML语言以前,请务必遵循以下规则,可以达到最佳效果.极道学习方 ...
- c++ 结构体赋值_《零基础看得懂的C语言入门教程》—(十二)结构体是这么回事
一.学习目标 了解C语言的结构体的使用方法 了解C语言结构体的结构的赋值 了解多种C语言结构体变量的赋值方法和取值方法 目录 <零基础看得懂的C语言入门教程>--(二)简单带你了解流程 & ...
- c语言作业ppt模板,C语言入门教学PPT模板
目前要说发展前景最好的行业,那么就必然是互联网行业了,大部分行业现在都离不开计算机,也就是说学好计算机,走到哪里都不怕,特别是程序员,那么C语言就是首先需要接触的.本模板是由西西为大家整理的C语言入门 ...
最新文章
- 转载 mysql 数据库优化配置实例
- C++一维数组和指针的关系总结
- tars框架php,TarsPHP: TARS-PHP是针对php使用tars二进制协议,以及tars平台整体运维、RPC等一系列能力的解决方案...
- [css] 你有没有使用过“形似猫头鹰”(例:`* + *{ ... }`) 的选择器?
- 互联网晚报 | 3月3日 星期四 |​ 苹果将于北京时间3月9日凌晨2点举办春季发布会;vivo子品牌NEX被砍掉...
- web of science上查找相关会议和期刊的论文
- java简单租车系统 慕课手记_Java租车系统(新手)
- Tableau 10.5 安装教程
- IPv6规模部署及专项督查工作全国电视电话会议
- 《Python编程从入门到实践 第二版》第十六章练习
- linux 执行 ktr脚本,kettle在linux下面用于shell脚本执行:转换或者作业
- 非专业python学多久_非的解释|非的意思|汉典“非”字的基本解释
- 【站内题解】十六道csdn每日一练Python题解
- 七彩虹将星 X15 AT 2023 参数配置 七彩虹将星 X15 AT 评测
- S3C6410启动方式
- Wind River workbench小结
- Sunday算法java实现
- css样式内联式,外联式,嵌入式
- 软考的网络工程师对就业有用吗?
- STM32开发日记001:ARM和单片机之间的关系
热门文章
- Win11 的这 19 个新功能,你都用上了吗?
- [计算几何] [BZOJ4246] 两个人的星座
- 内行人看笑话 外行人一脸懵逼
- The server time zone value ‘锟叫癸拷锟斤拷\u05FC时锟斤拷‘ is unrecognized or represents more than one time zone
- 队爷的讲学计划 (强连通缩点+最短路)
- 基于Laravel开发的Diy手机壳在线定制系统源码
- SELECT数据查询例题4——分组查询
- pdf插入图片到指定坐标位置 亲测可用
- html class生效顺序,HTML5 CSS3小猪日历(动物挂历)
- 第九周 作业管理系统成本估算