当前课程知识点:计算思维导论 > 第三单元 > 3.4 “九九归一”的加法运算 > Video
大家好
这一节我们介绍
九九归一的加法运算
前面我们介绍了
用全加器实现的
二进制数加法器
从而实现了加法运算机器化
我们知道
算术运算除了加法
还有减法
乘法和除法
从自身的体会来说
它们一点也不比加法容易
甚至更复杂
那么
减法
乘法
除法运算
怎么办呢
让我们先从减法说起
二进制减法运算
怎么做呢
比如计算51减22
相当于
二进制110011减10110
手工计算是这样的
结果是11101
也就是十进制的29
对此 是不是像加法运算一样
先设计一个全加器
然后再设计一个多位数的减法器
答案是 NO
那怎么办呢
为更好地理解
科学家们超人的智慧
我们先引入几个概念
这就是原码 反码和补码
这几个概念并不复杂
让我们用实例
110011减10110
加以说明
首先 我们看到
被加数和加数的宽度是不一样的
前者是6位数
后者是5位数
需要拓展成相同的宽度
假定我们按7位来拓展
当然其他宽度也行
道理是一样的
那么不够七位
就在前面补零
这样结果就变成
0110011减0010110
我们称拓展后的
被加数和加数为真值
代表真正参与运算的数
再从数学角度看
我们可以把
减法式子写成加法的式子
也就是
正0110011加负0010110
大家看到了
被加数是正的
加数是负的
那么正号
负号
又怎么表示呢
为了统一和一致
数的符号也要数字化
也就是正数符号用0表示
负数符号用1表示
这样一来上述的式子
就变成了
00110011加上10010110
经过如此变换后的
被加数和加数
我们称之为机器数
直接用机器数相加
不可能得到正确的结果
而是需要转换成补码运算才行
那么 如何转换成补码呢
正数的原码
反码
补码
是一样的
也就是前面给出的机器数
因此
正110011它的补码
等于00110011
负数的原码
也和它的机器数一样
也就是
负10110等于10010110
负数的反码
就是在原码的基础上按位取反
也就是原来是1
现在改为0
原来是0的
现在改为1
但最左边的符号位保持不变
因此 负10110它的反码
就是11101001
那么 负数的补码呢
就是在其反码的基础上
再加一个1
因此负10110它的补码
就变成了11101010
好 被加数和加数的补码都有了
现在把这两个数
它的补码相加
看看结果如何
我们看
00110011加上11101010
结果等于多少呢
除最高位的进位以外
结果是00011101
这个值其实就是
十进制数的29
那么51减22的结果
确实是29
可我们刚刚做的是加法运算
减法运算
竟然可以转换成加法来做
是不是很神奇
补码运算生活中其实也有
比如现在是上午9点
你完全可以理解为
还差3小时就12点了
当然 你也可以理解为
从0点开始到现在
已经过去9个小时了
也就是说从钟表的角度来说
9等于12减3也等于12加9
因此 对于钟表来说
负3的补码就是9
不难理解吧
到此 减法运算不成问题了
那么 乘法运算怎么办呢
通过下面的实例
你不难看出
二进制数乘法运算的本质
是加法
比如1101011乘101
其实是两个被乘数错两位相加
因此 只要能做加法
也就能乘法了
那么 除法运算怎么办
道理其实差不多
除法运算的本质是减法
比如这个例子
而减法运算
前面已经讨论过
最终也变成加法运算
特别说明的是
对于计算机来说
求一个机器数的反码
补码
是一件非常容易的事情
通过补码运算
可以把减法运算变成加法运算
而乘法可以用加法来做
除法可以转变成减法
这样一来
加减乘除
四种算术运算九九归一了
显然
这对简化CPU的设计
非常有意义
CPU里面只要有一个加法器
就可以做算术运算了
因此 引入补码意义非同寻常
可以说是先辈们智慧的结晶
好 这一节就讲到这
谢谢大家
-1.1 计算思维及其教育
--Video
-2.1 计算是什么
--Video
-2.2 计算与自动计算
--Video
-2.3 计算机及其计算本质特征(I)
--Video
-2.4 计算机及计算的本质特征(II)
--Video
-3.1 数的表示与模拟计算
--Video
-3.2 数的表示与数字计算
--Video
-3.3 二进制加法运算的机器化
--Video
-3.4 “九九归一”的加法运算
--Video
-3.5 二进制之优越性及问题与代价
--Video
-4.1 从数学危机到图灵机
--Video
-4.2 图灵机的计算能力
--Video
-4.3 什么问题都能计算吗?
--Video
-4.4 冯•诺依曼机及其发展与演化
--Video
-4.5 从算盘到图灵机——机械计算的本质
--Video
-4.6 电子计算机——透过现象看本质
--Video
-5.1 思维可机械计算吗(I)
--Video
-5.2 思维可机械计算吗(II)
--Video
-6.1 量子理论
--Video
-6.2 量子计算机
--Video
-7.1 人类求解问题之过程
--Video
-7.2 基于计算(机)的问题求解过程
--Video
-7.3 面向过程的结构化设计方法学
--Video
-7.4 面向对象之方法学
--Video
-7.5 面向对象技术
--Video
-7.6 抽象
--Video
-7.7 计算学科中的抽象
--Video
-7.8 时间与空间及其相互转换
--Video
-7.9 技术层面的其他方法学
--Video
-7.10 认知层面的其他方法学
--Video
-8.1 算法与程序
--Video
-8.2 算法设计方法——枚举
--Video
-8.3 算法设计方法——递推
--Video
-8.4 算法设计方法——递归
--Video
-8.5 算法设计方法——分治
--Video
-8.6 算法设计方法——仿生
--Video
-9.1 机器间的通信方式
--Video
-9.2 数据转发方法
--Video
-9.3 网络分层体系结构
--Video
-9.4 有趣的对称加密技术
--Video
-9.5 难解的非对称加密技术
--Video
-9.6 数字签名及其应用
--Video
-9.7 从自然智能到人工智能
--Video
-9.8 符号主义的基本思想
--Video
-9.9 连接主义Ⅰ
--Video
-9.10 连接主义Ⅱ
--Video
-9.11 行为主义的基本思想
--Video
-9.12 机器翻译的愿景与困难
--Video
-9.13 峰回路转的自然语言处理
--Video
-9.14 信息传输中的问题与挑战
--Video
-9.15 重复传输与冗余编码
--Video
-9.16 校验与校验和
--Video
-9.18 自纠错技术及应用
--Video
-9.19 两种简单的数据压缩方法
--Video
-9.20 哈夫曼编码
--Video
-9.21 数据压缩极限与LZ压缩方法
--Video
-9.22 大海捞针的搜索引擎
--Video
-9.23 网页排序方法(PageRank)
--Video
-10.1 计算文化
--Video
-期末考试--作业