看到标题,不出意外的话,你肯定开始骂我了:**标题党,什么编程语言五分钟就能学会?

其实我本来也是不相信的,但是学过了才知道这是真的。

1、Brainfuck

看到这个小标题,不要误会,我没有骂人。

这就是今天文章的主人公,也就是让你们五分钟能够学会的一门编程语言——Brainfuck。

Brainfuck,简称BF,是一种极小化的编程语言,由Urban Müller在1993年创造。

目标是创建一种简单的、可以用最小的编译器来实现的、符合图灵完全思想的编程语言。

PS:不得不佩服大佬命名方式,或许这就是大佬吧!!!

2、语法

学习编程语言,首先就要学习其语法。

Brainfuck 编程语言 由 8 个命令组成:

语法 含义
> 指针向右移动一格
< 指针向左移动一格
+ 使指针当前格的字节数值加1
- 使指针当前格的字节数值减1
. 把当前格数值按 ASCII 表输出到终端
, 接受一个字节的输入,将其值存储在数据指针的字节中。
[ 当指针当前值为 0 时,程序跳转至与之对应的 ] 之后;否则程序正常执行
] 程序跳转回与之对应的 [ 处

自此,你学完了 Brainfuck 语言的所有语法,我想都用不了五分钟吧。

3、Hello World

老规矩,新语言上手的第一步就是要能输出 Hello World。

问题:这里我们先练习如何在屏幕打印一个字母 ‘A’ ?

3.1 菜鸟版

分析:

因为 ASCII 表中 'A' 对应的值为 65。所以你可能很快就会有第一种编程方案:

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.

这里 + 有65个,然后通过 . 将其输出到终端,如下:

看上去解决了这个问题,但是这里的 + 实在太多了,我们编程的时候很容易少写或者多写,那么有没有什么方法能简化呢?

3.2 进阶版

ASCII 表中 'A' 对应的值为 65。为了少打几个 +,我们很自然的想到乘法运算,65 = 13*5.

所以我们可以通过循环来改进上面的方法:

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

这里我解释一下上面的语法:

①、第一行,有5个 +,表示当前格子数加到 5;

②、第二行,一个 [,表示进入一个循环;

③、第三行,表示指针向右移动一格,并且该格子数值为 13;

④、第四行,表示指针向左移动一格,并且该格子数值减 1(初始化值为5);

⑤、第五行,循环的结束语句,判断指针所在格子是否为0,不为0,移动到第3行代码继续执行,为零则退出循环。

⑥、第六行,指针向右移动一格,并且向终端输出该格子的值。

下面通过动图给大家演示一下:

3.3 输出 Hello World!

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

4、总结

不知道大家学完这门语言之后有什么感想。

首先我要说的是,这门语言并不是为了设计实际软件而设计的,而是为了挑战计算机编程的界限。

我们知道计算机界最高奖项叫图灵奖,图灵在1936年发表的 "On Computable Numbers, with an Application to the Entscheidungsproblem"(《论可计算数及其判定性问题的应用》)中提出的数学模型——图灵机(Turing Machine),描述了它是什么,并且证明了只要图灵机可以被实现,就可以用来解决任何可计算问题,感兴趣的大家可以去研究研究。

这门语言对于我们去理解图灵思想也是很有帮助的。

比如,一门新的语言,我们要证明其是否是图灵完备的,如果用数学证明的方式必然会比较复杂,但是如果你能用这门新语言实现一个 Brainfuck 的解释器,那么就必然证明其是图灵完备的。

彩蛋

Brainfuck 语言图形化演示:https://openprocessing.org/sketch/516467

一门能让你五分钟学会的语言-Brainfuck的更多相关文章

  1. [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例)

    [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例) 踏雁寻花 发表于 2015-8-23 23:31:28 https://www.itsk.com/thread-35 ...

  2. 五分钟学会 Kotlin 语法

    为什么使用Kotlin 项目一期在收尾了终于有时间折腾了,一个多月以来Kotlin从入门到现在,坚持用来开发的切身感受.因为语法与Java的区别挺大的一开始很想放弃,如果不是因为项目在使用,想必很少人 ...

  3. 五分钟学会Python装饰器,看完面试不再慌

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题的第12篇文章,我们来看看Python装饰器. 一段囧事 差不多五年前面试的时候,我就领教过它的重要性.那时候我Pyt ...

  4. 喝咖啡写脚本,顺便再加一点点CSS语法糖 2.五分钟学会Less

    CoffeeScript + Html5 + Less这个新组合,看上去Less更容易拿下,先尝尝糖吧. Less这么小个东西,竟然要FQ,真是没有天理,简直不可理喻,先不管那么多了,那就看这个吧.h ...

  5. 五分钟学会centos配置gitlab

    下载gitlab 亲测: centos6.5 安装依赖包: : yum install curl policycoreutils policycoreutils-python openssh-serv ...

  6. 五分钟学会悲观乐观锁-java vs mysql vs redis三种实现

    1 悲观锁乐观锁简介 乐观锁( Optimistic Locking ) 相对悲观锁而言,乐观锁假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果 ...

  7. 五分钟学会HTML5的WebSocket协议

    1.背景   很多网站为了实现推送技术,所用的技术都是Ajax轮询.轮询是在特定的的时间间隔由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器.这种传统的模式带来很明显的缺点 ...

  8. 五分钟学会conda常用命令

    文章目录 conda常用命令 1. 获取版本号 2. 获取帮助 3. 环境管理 4. 分享环境 5. 包管理 conda常用命令 1. 获取版本号 conda --version 或 conda -V ...

  9. 五分钟学会generator函数

    什么是generator函数? 常规函数只会返回一个单一值(或者不返回任何值). 而 Generator 可以按需一个接一个地返回("yield")多个值.它们可与 iterabl ...

随机推荐

  1. SpringMVC指定配置文件位置和名称,控制Servlet的加载时间

    1. 2.

  2. 【跟着大佬学JavaScript】之节流

    前言 js的典型的场景 监听页面的scroll事件 拖拽事件 监听鼠标的 mousemove 事件 ... 这些事件会频繁触发会影响性能,如果使用节流,降低频次,保留了用户体验,又提升了执行速度,节省 ...

  3. buu第二页

    33.被劫持的神秘礼物 打开后直接搜索HTTP,发现了以POST方式提交的数据,追踪HTTP流,根据题目提示,把name和word拼在一起 再根据题目提示,用MD5解密 这样就得到了flag 34.刷 ...

  4. react配置postcss-pxtorem适配

    适配移动端操作如下: 安装 postcss-pxtorem .amfe-flexible npm i postcss-pxtorem npm i amfe-flexible amfe-flexible ...

  5. STM32与物联网01-ESP8266基本操作

    ESP8266物联网简介 ESP8266简介 ESP8266 是上海乐鑫公司开发的一款具有 WiFi 功能的控制芯片,它带有完整的 TCP/IP 协议栈,因此可以用作物联网开发. ESP8266 本身 ...

  6. MIT 6.824 Llab2B Raft之日志复制

    书接上文Raft Part A | MIT 6.824 Lab2A Leader Election. 实验准备 实验代码:git://g.csail.mit.edu/6.824-golabs-2021 ...

  7. APISpace 让你快速获取安徒生童话故事

    <安徒生童话>是丹麦作家安徒生创作的童话集,共由166篇故事组成.该作爱憎分明,热情歌颂劳动人民.赞美他们的善良和纯洁的优秀品德:无情地揭露和批判王公贵族们的愚蠢.无能.贪婪和残暴. 接口 ...

  8. 图像处理——相位恢复(GS,TIE,改进型角谱迭代法)

    利用GS,TIE,改进型角谱迭代算法进行相位恢复 角谱传播理论 角谱传播理论可以翻阅傅里叶光学的书,就能找到定量分析的计算公式,可以分析某个平面的角谱垂直传播到另外一个平面的角谱,得到其振幅与相位信息 ...

  9. 透过Redis源码探究Hash表的实现

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com/archives/667 本文使用的Redis 5.0源码 概述 我们在学习 Redis ...

  10. Stream流中的常用方法foeEach和Stream流中的常用方法filter

    延迟方法:返回值类型仍然是Stream接口自身类型的方法,因此支持链式调用.(除了中介方法外,其余方法均为延迟方法) 终结方法:返回值类型不再是Stream接口自身类型的方法,因此不再支持类似Stri ...