案例一 原码反码和补码

 我们把一个数在计算机内被表示的二进制形式称为机器数,该数称为这个机器数的真值。机器数有固定的位数,具体是多少位与机器有关,通常是8位或16位。
原码:是指符号位用0或1表示,0表示正,1表示负,数值部分就是该整数的绝对值的二进制表示。例如:假设机器数的位数是8,那么:[+17]原=00010001 [-39]原=10100111
反码:在反码的表示中,正数的表示方法与原码相同;负数的反码是把其原码除符号位以外的各位取反(即0变1,1变0)。通常,用[X]反表示X的反码。例如: [+45]反 = [+45]原 = 00101101,[-32]原 = 10100000,[-32]反 = 11011111
补码:在补码的表示中,正数的表示方法与原码相同;负数的补码在其反码的最低有效位上加1。通常用[X]补表示X的补码。例如: [+14]补 = 10100100,[-36]反 = 11011011,[-36]补 = 11011100
实事求是地说,引入补码意义非同寻常,可以说是先辈们智慧的结晶。因为,通过补码运算,可以把减法运算变成加法运算;而乘法可以用加法来做,除法可以转变成减法。这样一来,加、减、乘、除四种运算“九九归一”了。这对简化CPU的设计非常有意义,CPU里面只要有一个加法器就可以做算术运算了。

+

 因此只要能将数字转化为二进制机器数,那么就可以模拟计算机完成各种数值运算,实现加减乘除的功能。下面我们来一起将正负数的十进制数转化为二进制:
需求分析:输入:一个十进制数,输出:这个数的原码,反码和补码。
实现:
1、正数的原码反码和补码都是相同的,因此只要求出一个即可,我们通常用栈来实现向二进制的转换,blockly提供list作为指针数组可以实现栈的操作,如下图所示:

栈操作实际上就是一种先进后出的数据结构:

我们举一个例子,比如求29的原码,那么过程如下:

list数组提供从头尾插入和删除元素,并能在指定位置提取元素:

因此我们只要依次将求出的余数从数组头处插入即可,读取数组的时候从头到尾开始阅读。

2.负数的原码其实内容上和正数是一样的,只是符号位与正数是不同的,我们之所以把数设置成8位,就是为了留出1位作为符号位,因此8位数可以表示-128~127,第一位表示符号位,0为正数,1为负数,所以-29二进制表示为:10011101。
负数的反码就是符号位不变,其余位取反,反码的意义就在于进行下一步取补码。负数的补码就是反码加1,求出补码的算法就是从最后一位开始判断,如果是0,就将其变为1,如果是1,就判断倒数第二位,依次类推,你可以举几个例子自行判断一下。

案例二 有限状态机

 有限状态机,(英语:Finite-state machine,FSM),又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。它反映从系统开始到现在时刻的输入变化,转移指示状态变更,并且用必须满足来确使转移发生的条件来描述它;动作是在给定时刻要进行的活动的描述。  我们举一个例子,我们平时在自动售货机上买饮料,自动售货机的内部实际上就是一个有限状态机:
假如有这样一个自动售货机,售卖苏打汽水,它有如下五种输入:

  • 输入0 -- 存入25美分
  • 输入1 -- 存入1美元
  • 输入2 -- 取汽水
  • 输入3 -- 退币
  • 输入4 -- 退出系统

实现如下:

 其实我们的小车就是通过有限状态机来实现的,我们可以把小车的行为依依列举出来,比如左右转,前进,发出声波,光线,声音等,我们只要通过控制这些状态就能控制小车完成各样的工作:

你能自己设计出一个更加复杂的售货机么?

【blockly教程】Blockly编程案例的更多相关文章

  1. 【blockly教程】第六章 Blockly的进阶

    6.1 模块化程序设计  一个较大的程序一般应分为若干个程序模块,每一个模块用来实现一个特定的功能.所有的高级语言中都有子程序这个概念,用子程序实现模块的功能.比如在C语言中,子程序的作用是由函数完成 ...

  2. 【blockly教程】第三章Blockly顺序程序设计

    3.1 什么是Blockly语言  2012年6月,Google发布了完全可视化的编程语言Google Blockly,整个界面清晰明了, 你可以如同在玩拼图一样用一块块图形对象构建出应用程序.每个图 ...

  3. ArcGIS Python编程案例-电子资料链接

    ArcGIS Python编程案例(1)-Python语言基础 https://www.jianshu.com/p/dd90816d019b ArcGIS Python编程案例(2)-使用ArcPy编 ...

  4. 面向对象编程案例02--显示地调用父类的__init__()

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #面向对象编程案例02--显示地调用父类的__init__() ''' 继承是面向对象的重要特征之一,继承是2 ...

  5. python 面向对象编程案例01

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #面向对象编程案例01 class Behave(): def __init__(self,name): se ...

  6. Java 学习之网络编程案例

    网络编程案例 一,概念 1,网络编程不等于网站编程 2,编程只和传输层打交道,即TCP和UDP两个协议 二,案例 1,TCP实现点对点的聊天 Server端:两个输入流:读客户端和控制台,一个输出端: ...

  7. javascript进阶教程第一章案例实战

    javascript进阶教程第一章案例实战 一.学习任务 通过几个案例练习回顾学过的知识 通过练习积累JS的使用技巧 二.实例 练习1:删除确认提示框 实例描述: 防止用户小心单击了“删除”按钮,在用 ...

  8. Python的元编程案例

    Python的元编程案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是元编程 元编程概念来自LISP和smalltalk. 我们写程序是直接写代码,是否能够用代码来生成 ...

  9. 大数据笔记(十)——Shuffle与MapReduce编程案例(A)

    一.什么是Shuffle yarn-site.xml文件配置的时候有这个参数:yarn.nodemanage.aux-services:mapreduce_shuffle 因为mapreduce程序运 ...

  10. SpringBoot图文教程「概念+案例 思维导图」「基础篇上」

    有天上飞的概念,就要有落地的实现 概念+代码实现是本文的特点,教程将涵盖完整的图文教程,代码案例 每个知识点配套自测面试题,学完技术自我测试 本文初学向,所以希望文中所有的代码案例都能敲一遍 大哥大姐 ...

随机推荐

  1. python 线程中的局部变量ThreadLocal

    一个线程使用自己的局部变量比使用全局变量好局部变量只有线程自己能看见,不会影响其他线程全局变量的修改必须加锁 ThreadLocal 线程局部变量 import threading # 创建全局Thr ...

  2. php红包生成随机算法

    一.适用场景 红包总金额X,分配成Y个红包,每个红包随机金额. 二.生成算法 /** * 红包生成算法 * @param $money 总金额 * @param $number 红包数量 * @par ...

  3. 08提权 系统文件权限和远程连接IP绕过 安装后门

    大家都知道08权限的系统权限设置很严格  面对限制IP连接的情况 我们及时拿到system权限 有账号也上不去这种情况下只能弄shift后门 或者放大镜了  但08权限 在system权限也操作不了系 ...

  4. servlet api.jar是干什么的?

    支持servlet的jar包.应该叫servlet-api.jar你如果编写过servlet就知道要用到HttpServletRequest和HttpServletResponse等对象,这些对象都是 ...

  5. Android进阶笔记17:Android手机屏幕坐标系

    1. 手机屏幕坐标系: 整个坐标系是以手机屏幕左上角为原点(0,0),如下:

  6. IBM websphere MQ远程队列的简单配置

    原理: 1.远程队列分发送方和接收方 2.接收方配置: 接收方配置要先拿到对方的发送通道配置,接收方的队列名称必须和远程发送方的队列名称一致,告诉远程发送方,你的地址,队列管理器名称等信息,在通道中建 ...

  7. try...finally的用法

    finally里面只是执行完成try中的代码后,必须执行的代码,即使是try中有异常抛出,也是会去执行finally. >>> try: ... 1/0 ... finally: . ...

  8. springMVC文件上传大小超过限制的问题

    [转自]https://my.oschina.net/ironwill/blog/646762 springMVC是一个非常方便的web层框架,我们使用它的文件上传也非常的方便. 我们通过下面的配置来 ...

  9. SSH框架——(二)四层结构:DAO,Service,Controller,View层

    1. DAO层: 主要任务:做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此. DAO层的设计:首先是设计DAO层的接口,然后再Spring的配置文件中定义此接口的实现类,然后就可以在模块 ...

  10. 如果将自己的项目共享到github上

    1:创建仓库 点击New repository创建仓库.Git上仓库就相当于项目的意思 创建仓库名(repository) 创建成功后得到自己的github地址 2:在eclipse中创建自己的项目 ...