【blockly教程】Blockly编程案例
案例一 原码反码和补码
我们把一个数在计算机内被表示的二进制形式称为机器数,该数称为这个机器数的真值。机器数有固定的位数,具体是多少位与机器有关,通常是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编程案例的更多相关文章
- 【blockly教程】第六章 Blockly的进阶
6.1 模块化程序设计 一个较大的程序一般应分为若干个程序模块,每一个模块用来实现一个特定的功能.所有的高级语言中都有子程序这个概念,用子程序实现模块的功能.比如在C语言中,子程序的作用是由函数完成 ...
- 【blockly教程】第三章Blockly顺序程序设计
3.1 什么是Blockly语言 2012年6月,Google发布了完全可视化的编程语言Google Blockly,整个界面清晰明了, 你可以如同在玩拼图一样用一块块图形对象构建出应用程序.每个图 ...
- ArcGIS Python编程案例-电子资料链接
ArcGIS Python编程案例(1)-Python语言基础 https://www.jianshu.com/p/dd90816d019b ArcGIS Python编程案例(2)-使用ArcPy编 ...
- 面向对象编程案例02--显示地调用父类的__init__()
# -*- coding: utf-8 -*- #python 27 #xiaodeng #面向对象编程案例02--显示地调用父类的__init__() ''' 继承是面向对象的重要特征之一,继承是2 ...
- python 面向对象编程案例01
# -*- coding: utf-8 -*- #python 27 #xiaodeng #面向对象编程案例01 class Behave(): def __init__(self,name): se ...
- Java 学习之网络编程案例
网络编程案例 一,概念 1,网络编程不等于网站编程 2,编程只和传输层打交道,即TCP和UDP两个协议 二,案例 1,TCP实现点对点的聊天 Server端:两个输入流:读客户端和控制台,一个输出端: ...
- javascript进阶教程第一章案例实战
javascript进阶教程第一章案例实战 一.学习任务 通过几个案例练习回顾学过的知识 通过练习积累JS的使用技巧 二.实例 练习1:删除确认提示框 实例描述: 防止用户小心单击了“删除”按钮,在用 ...
- Python的元编程案例
Python的元编程案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是元编程 元编程概念来自LISP和smalltalk. 我们写程序是直接写代码,是否能够用代码来生成 ...
- 大数据笔记(十)——Shuffle与MapReduce编程案例(A)
一.什么是Shuffle yarn-site.xml文件配置的时候有这个参数:yarn.nodemanage.aux-services:mapreduce_shuffle 因为mapreduce程序运 ...
- SpringBoot图文教程「概念+案例 思维导图」「基础篇上」
有天上飞的概念,就要有落地的实现 概念+代码实现是本文的特点,教程将涵盖完整的图文教程,代码案例 每个知识点配套自测面试题,学完技术自我测试 本文初学向,所以希望文中所有的代码案例都能敲一遍 大哥大姐 ...
随机推荐
- linux普通用户使用root权限执行命令的脚本
上一篇有说到普通用户使用免密登录并使用root权限: http://www.cnblogs.com/01-single/p/8919254.html 现在使用脚本批量实现部署系统任务操作步骤: #!/ ...
- EDM邮件群发:群发邮件不进垃圾箱的独家秘笈
EDM邮件群发想要群发的邮件避免进入垃圾箱,不仅需要优化邮件内容和主题,管理收件人邮箱列表,还要有多服务器IP分流技术,控制发信速度,打乱收件人列表等手段,当然更少不了借助专业的邮件群发平台譬如U-M ...
- Python之Dict和Set类型(入门5)
转载请标明出处: http://www.cnblogs.com/why168888/p/6407905.html 本文出自:[Edwin博客园] Python之Dict和Set类型 1. Python ...
- Vue收藏资料
组件库的全局引用和按需引用:http://www.cnblogs.com/zhuanzhuanfe/p/7516745.html
- JavaScript小游戏--2048(程序流程图)
- Google Map中的瓦片
一.墨卡托投影google map使用的是EPSG:900913标准墨卡托投影(等角圆术地图投影)y = R*ln(tan(pi/4 + a/2))x = R*b当y等于piR时,投影图正好为一个正方 ...
- 简单使用idea Spring Boot搭建项目
第一步:使用Spring Initializr创建 第二步:项目配置 第三步:选择项目需要的依赖 第五步: ok 创建完成,修改仓库 maven{ url 'http://maven.aliyun.c ...
- 解决pycharm无法导入本地包的问题
在用python写爬虫程序时,import 行无法通过,具体情况如下: pycharm运行程序后,程序pass了,但是出现了警告,如下图所示: 这是由于该程序不在根目录下,无法导入本地包,解决办法如下 ...
- bootstrap-table页码ALL显示为NAN
在github上查阅找到的解决办法: https://github.com/wenzhixin/bootstrap-table/issues/435 页面部分: data-page-list=&quo ...
- 04 关于oracle的锁的级别以及介绍
关于oracle的锁的级别以及介绍 oracle造成锁表的情况: 一.查看锁的对象视图:select object_id,session_id,locked_mode from v$locked_ob ...