Y 分钟速成 bf

源代码下载: brainfuck-cn.bf

Brainfuck 是一个极小的只有8个指令的图灵完全的编程语言。

除"><+-.,[]"之外的的任何字符都会被忽略 (不包含双引号)。

Brainfuck 包含一个有30,000个单元为0的数组,和
一个数据指针指向当前的单元。

8个指令如下:
+ : 指针指向的单元的值加1
- : 指针指向的单元的值减1
> : 将指针移动到下一个单元(右边的元素)
< : 将指针移动到上一个单元(左边的元素)
. : 打印当前单元的内容的ASCII值 (比如 65 = 'A').
, : 读取一个字符到当前的单元
[ : 如果当前单元的值是0,则向后调转到对应的]处
] : 如果当前单元的值不是0,则向前跳转到对应的[处

[ 和 ] 组成了一个while循环。很明显,它们必须配对。

让我们看一些基本的brainfuck 程序。

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

这个程序打印字母'A'。首先,它把 #1 增加到6,使用它来作为循环条件,
然后,进入循环,将指针移动到 #2 ,将 #2 的值增加到10,然后
移动回 #1,将单元 #1 的值减1,然后继续。循环共进行了6次。

这时,我们在 #1,它的值为0,#2 的值为60,我们移动到
#2,将 #2 的内容加上5,然后将 #2 的内容打印出来,65在
ASCII中表示'A', 所以'A'就会被打印出来。


, [ > + < - ] > .

这个程序从用户的输入中读取一个字符,然后把它复制到 #1。
然后我们开始一个循环,移动到 #2,将 #2 的值加1,再移动回 #1,将 #1
的值减1,直到 #1的值为0,这样 #2 里就保存了 #1 的旧值,循环结束时我们
在 #1,这时我们移动到 #2,然后把字符以ASCII打印出来。

而且要记住的一点就是,空格在这里只是为了可读性,你可以将他们写成这样:

,[>+<-]>.

试着思考一下这段程序是干什么的:

,>,< [ > [ >+ >+ << -] >> [- << + >>] <<< -] >>

这段程序从输入接收2个参数,然后将他们相乘。

先读取2个输入,然后开始外层循环,以 #1 作为终止条件,然后将指针移动到
#2,然后开始 #2 的内层循环,将 #3 加1。但是这里有一个小问题,在内层
循环结束的时候,#2 的值是0了,那么下次执行外层循环的时候,就有问题了。
为了解决这个问题,我们可以增加 #4 的值,然后把 #4 的值复制到 #2,
最后结果就保存在 #3 中了。

好了这就是brainfuck了。也没那么难,是吧?为了好玩,你可以写你自己的 brainfuck程序,或者用其他语言写一个brainfuck的解释器,解释器非常容易 实现,但是如果你是一个自虐狂的话,你可以尝试用brainfuck写一个brainfuk的 解释器。

有建议?或者发现什么错误?在Github上开一个issue,或者发起pull request

原著Prajit Ramachandran,并由0个好心人修改。
Translated by: lyuehh
© 2022 Prajit RamachandranMathias Bynens
本作品采用 CC BY-SA 3.0 协议进行许可。


Learn X in Y minutes
Take a whirlwind tour of your next favorite language.
3 声望
2 粉丝
0 条评论
推荐阅读
Y 分钟速成 Git
源代码下载: gitGit 是一个分布式版本控制及源代码管理工具。Git 可以为你的项目保存若干快照,以此来对整个项目进行版本管理。版本什么是版本控制版本控制系统就是根据时间来记录一个或多个文件的更改情况的系...

小X学技术阅读 1.2k

如何满速下载百度网盘文件
在我们开心的网上冲浪时,经常会遇到某些资源是用百度网盘储存的,而百度网盘的下载速度经常是1MB以下、几十K、几百K,令人十分着急!!突然,一个 微信公众号 自称软件小妹的大佬出现了,直接为我们带来了一个 油...

小红石1阅读 6.2k

封面图
Y 分钟速成 Git
源代码下载: gitGit 是一个分布式版本控制及源代码管理工具。Git 可以为你的项目保存若干快照,以此来对整个项目进行版本管理。版本什么是版本控制版本控制系统就是根据时间来记录一个或多个文件的更改情况的系...

小X学技术阅读 1.2k

poetry 下运行 dbt(qbit)
dbt 是 Data Build Tool 的简称,目前由 dbt labs 公司负责开发和维护,公司的前身是Fishtown Analytics。

qbit阅读 1k

使用 Winget 命令在 Windows 上安装软件
Winget 是微软推出的一款安装包管理工具,使用户能够在命令行下寻找、安装、升级、删除和配置应用程序。这里以安装焰火十二卷(Rickrack)为例,演示了 Winget 的使用流程。

本征喵函数阅读 979

封面图
Y 分钟速成 docker
源代码下载: docker-cn.bat {代码...} 有建议?或者发现什么错误?在Github上开一个 issue ,或者发起 pull request !原著Ruslan López,并由 0 个好心人修改。© 2022 Ruslan LópezTranslated by: imba-tjd本作...

小X学技术阅读 724

Y分钟速成Scala
源代码下载: learnscala-zh.scalaScala - 一门可拓展的语言 {代码...} 更多的资源为没耐心的人准备的 ScalaTwitter Scala schoolThe Scala documentation在浏览器尝试 Scala加入 Scala 用户组有建议?或者发现什...

小X学技术阅读 574

3 声望
2 粉丝
宣传栏