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

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

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. Oracle创建用户和表空间

    一.概述 1.数据库实际管理中,不同业务系统需要使用'不同的用户'进行管理维护和使用,这样做把业务数据和系统数据独立分开管理,利于数据库系统管理: 2.在数据库中创建业务系统用户时候,建议为用户创建指 ...

  2. CentOS7 No rule to make target

    由于缺少依赖包,需要安装以下包: yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freet ...

  3. 【干货】MySQL底层架构设计,你了解多少?

    很多开发同学对SQL优化如数家珍,却对MySQL架构一知半解.岂不是只见树叶,不见森林,终将陷入细节中不能自拔. 今天就一块学习MySQL分层架构,深入了解MySQL底层实现原理,以及每层的作用,我们 ...

  4. Vue中关于this指向的问题

    由Vue管理的函数 例如: computed 计算属性 watch 监视属性 filters (Vue3中已弃用且不再支持) 过滤器 .... 上述属性里配置的函数不要采用箭头函数写法,因为箭头函数没 ...

  5. 「SDOI2016」征途 题解

    「SDOI2016」征途 先浅浅复制一个方差 显然dp,可以搞一个 \(dp[i][j]\)为前i段路程j天到达的最小方差 开始暴力转移 \(dp[i][j]=min(dp[k][j-1]+?)(j- ...

  6. 基于Docker-compose搭建Redis高可用集群-哨兵模式(Redis-Sentinel)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_110 我们知道,Redis的集群方案大致有三种:1)redis cluster集群方案:2)master/slave主从方案:3) ...

  7. .Net 5.0快速上手 Redis

    1. Redis的安装地址: https://files.cnblogs.com/files/lbjlbj/Redis3.7z   2.开启服务: 找到redis目录 打开cmd 输入redis-se ...

  8. 6.13 NOI 模拟

    \(T1\ first\) \(bitset\)字符串匹配 \(yyds\) \(O(\frac{n^2}{w})\)就是正解! #include<bits/stdc++.h> #defi ...

  9. 故障案例 | 主从复制环境中tokudb引擎报错排查过程

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 0 ...

  10. 关于KeyFile的破解,含注册机源代码

    程序来自于<加密与解密3>的第五章的PacMe.exe.书中并没有给出C语言实现的加密与解密代码,自己花了一些时间,把代码还原了,并且写了一个C语言的注册机. 加密原理:正如书中所说,此程 ...