BrainFuck

作者: fushuang | 来源:发表于2017-11-08 14:26 被阅读110次
    BrainFuck

    简介

    Brainfuck是一种极小化的计算机语言,它是由Urban Müller在1993年创建的。由于fuck在英语中是脏话,这种语言有时被称为brainfck或brainf*k,甚至被简称为BF。
    也算是一个奇葩语言吧,不过好像没啥实际作用,因为太轻量了,只能用于表示简单的某些简短的字符串(推荐装逼表白使用吧,其它大概没啥卵用),解析规则还挺有意思的,好久没写博客了,记录一下上午研究成果.

    解析规则

    • ">": 指针位置右移一位
    • "<": 指针位置左移一位
    • +: 指针所指向的位置里面的值加1
    • -: 指针所指向的位置里面的值减1
    • . :输出指针当前位置指向单元格中的内容
    • [: 如果指针指向的单元值为零,向后跳转到对应的]指令的次一指令处
    • ]:如果指针指向的单元值不为零,向前跳转到对应的[指令的次一指令处(额...好像比较难理解,只是用于循环某一段代码而已,两个一般联合使用)

    实践出真知,举个栗子吧..

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

    先来看看前面这一坨, []根据解析规则定义,这俩中括号为将括号内的代码执行N次
    至于N等于几,取决于[]前面的+号数量,前面是10个,即为重复十次;
    再来看一下括号里面,> 代表向右移位指针,如果指针右边之前没有移动到过,及说明需要创建新的空间 ,并将指针所指向的内容

    这里写图片描述

    如图,指针从-10的位置开始(当然,一开始里面不是10,是0,我只是方便说位置)作为起点,向右一动一位,迎来了九个+,将第二格子里面数字加到9,再右移,把第三个加到8,第四个加到7,然后想左移动三次,将第一个减到-1.
    因为这段旅程是在方括号里面,为循环体,循环十次,形成上图效果.且指针位置位于第一个格子
    至于为什么要做个90 80 70呢,其实是为了方便输出Ascll码,因为想要输出的英文字符,大概都在这个区间,构造一个基数,后面不需要写太多的东西,移到接近的数值位置操作就可以了

    这里写图片描述
    >>>++.---.<----..+++. 
    

    再来看后面这一坨 ,当前指针位于第一个格子,右移3 ,++,让70变成72,"."代表输出当前指针所指向位置的数值,输出 72.
    同理,输出69 、76、 76、79
    对照上表,输出的英文字符为Hello

    相关文章

      网友评论

        本文标题:BrainFuck

        本文链接:https://www.haomeiwen.com/subject/qhwijxtx.html