Scratch与数学的整合28
第28课 二进制(二)
(资料图)
一、课程导入
我们平时算加减法都是按十进制算的,那么二进制也可以进行加减法运算吗?
二、知识储备
二进制的加减法法则:0(2)+0(2)=0(2),0(2)+1(2)=1(2),1(2)+1(2)=0(2),0(2)-0(2)=0(2),1(2)-0(2)=1(2),0(2)-1(2)=1(2)(借位后),1(2)-1(2)=0(2)。
三、例题讲解
四、流程图
五、变量信息
编写二进制加法用到的变量:个位加数、另一个个位加数、十位和、另一个十位加数、十位和、百位加数、另一个百位加数、百位和、千位、结果
编写二进制减法用到的变量:个位被减数、个位减数、个位差、百位差、十位被减数、十位减数、十位差、结果
六、代码示例
我们先来看看二进制加法的代码
首先询问原式的两个个位的加数。
然后根据两个加数的和的情况判断个位和是0还是1。
再询问原式的两个十位的加数。
接着对十位加数的和是否等于2合并起来分类讨论。对于第一次判断为不等于2的,要继续判断该两数的结果,如果结果是2或0,则十位和是1,否则判断结果是1,十位和是1。对于第一次判断为2的,要继续对该两数和判断,若判断结果为1则十位和为0,若第二次判断与第一次判断结果相同,则十位和等于1。
接下来再询问两个百位的加数。
再接下来对十位+另一个十位数+1的变量值的判定结果(3,2,1,0)中的每一个情况分类讨论,进而求出百位和、是否要补上千位。把每个需要保留的数位“连接”起来。
最后说出最终的答案。
我们再来看看二进制减法的代码。
首先询问被减数、减数。
然后以1为基准判断两数被减数减减数够不够减,并根据情况求个位差。
再询问十位被减数、减数。
接着根据个位差够不够减的情况判断是否会出现连退位。根据前面的求个位差可知,如果执行的是2-个位数的过程,则说明十位不退位。然后对十位被减数和十位减数的相等或不等关系进行十位差、结果进行分类讨论。都等于1就结果只没有百位,其余情况结果只有个位。
反之如果不出现连退位,那么就不受个位的影响了。那么我们直接判断十位够不够减。这时单独算十位差。一个数的最高位不能为0,而二进制满2进1,那么百位只能是1。既然百位固定是1了,那么十位必须“连接”上。拿“百位差”变量作为最终结果。
最后说出最终的答案。
七、知识拓展
二进制运算不仅可以进行基本的加减乘除,也可以推广至多个数连加、连乘或乘加。观察图片,我们发现这三幅图分别是与、或、非逻辑电路。我们用“0”表示灯泡亮,用“1”表示
灯泡不亮,那么我们可知左图只要有一个灯泡亮另一个就必然亮,中间的图只要电源是开的,可能亮其中任意一个也可能两个全亮。右边的图如果灯泡是亮的,则电源处于关闭状态,反之同理。于是我们列出真值表来:会发
现只有A,B都为1时“与”布尔值才为1,其余情况都为0,只有A,B,只有A,B都为0时“或”布尔值才为0,其余情况都为1,A为0时not(非)A为1。这样就有了3种逻辑运算:与运算、或运算、非运算。可是每种运算规则都对应于哪种算术规则呢?将4组A、B的值相加分
别得到的结果都对应于Aand(与)B、Aor(或)B中的哪个呢?相乘的呢?,not(非)A又是怎样否定原数的?我们列表找一找。我们可以发现,A×B是与运算、A+B是或运算、最后0元、1之间取反是非运算。那运算顺序呢?算数四则运算应该该是先去括号再乘除后加减吧?那这里逻辑运算也应遵循这样的运算顺序:非运算→与运算→或运算。
标签: