qakcn
学生会会长
学生会会长
  • 注册日期2008-10-31
  • 最后登录2021-01-05
  • 生日1988-8-18
  • 光玉3394颗
阅读:1801回复:7

科普第29篇——计算机是怎样做乘除法

楼主#
更多 发布于:2012-08-09 18:00
前面几篇详细的讲了计算机做加减法的方法,那计算机是怎样做乘除法的呢?

其实一点都不复杂,我们其实都知道方法。

来看一下吧:

十进制:3 × 4 = 3 + 3 + 3 + 3 = 6 + 3 + 3 = 9 + 3 = 12

就这样?
没错,就这样!把乘法转换为连续加法来算!

但是计算机并不认识4到底要重复几次(计算机只能进行逻辑运算,是不“识数”的),所以,这时候就需要另外一个部件——计数器了。
计数器的原理就不细说了,反正大家只要知道,每做一次运算,计数器就会增加1(除非被清零或超过计数器计数上限才会回到0)。

于是,每做一次加法,计数器就增加1,直到计数器的数值和乘数相同。

在处理负数的乘数时,因为计数器并不能计负数,所以我们首先要取它的相反数,然后再做乘法,最后再根据乘数和被乘数的符号来决定积的符号:符号相同,积为正;符号不同,积为负。
而被乘数是负数并不影响加法计算,所以就不用单独处理了。


除法呢,估计大家都想到了,就是利用连续的减法来实现的。我们现在只讨论整数的计算,因此得到的是商和余数,不再计算小数部分。

比如:
十进制:15 ÷ 4 = 3 ...... 3
1、15 - 4 = 11
2、11 - 4 = 7
3、7 - 4 = 3
经过了3步减法,因此商是3,第3步的结果已经小于除数,因此是余数3。

还有涉及负数的除法,如果除数是负数,那么我们减法的结果实际是增大的,“结果小于除数”这一规定就没有什么意义了。而如果被除数是负数,那么也会出现一开始结果就小于除数的情况。所以在计算除法时,我们要把负数取相反数再来做减法计算。最后再根据除数与被除数的符号决定结果符号:符号相同,商为正;符号不同,商为负;而余数的符号总与被除数相同。

做除法还是要利用到计数器,计算一共做了多少步,直到减法计算的结果小于除数。最终计算次数就是商,最后一步减法的结果就是余数。如果是负数,先取相反数再计算。


在乘除法中,其实有一种更加简单的计算方法——移位。

怎么回事呢?其实我们可以发现,2的二进制表示是10。所以,一个数乘以2,就相当于把各位左移一位;除以2,就相当于把各位右移一位。
比如:
十进制:3 × 2 = 6
二进制:0011 × 0010 = 0110

十进制:12 ÷ 2 = 6
二进制:1100 ÷ 0010 = 0110

这个规律还可以扩展,一个数乘以2n,相当于把二进制各位左移n位;除以2n,相当于把二进制各位右移n位。


在处理乘除法时,我们会发现一些问题——计算乘法时,很容易溢出;计算除法时,又会出现除不尽的情况。

解决方法其实也没有捷径,为防止溢出,我们只有扩大表示数的表示位数,比如用16位数计算比8位数更不容易溢出。而现代编程与语言中,整数一般是32位的。

而除不尽的问题,有时我们就是需要整数的商和余数(比如计算最大公约数时),有时我们又需要小数的结果,这就涉及小数怎么表示了,我们以后再讨论小数的问题。


虽然我们可以用加法器来处理乘除运算,但是特别大的数的计算时(比如一些在大型机中运行的分子模拟、地理信息处理等),加法器效率就显得不足了,此时会需要专门的乘法器了。乘法器的基本构成其实还是加法器,不过对乘法计算进行了优化。


加减乘除四则运算我们都讨论过了,而其他运算其实都可以转换为四则运算。下次,我们讨论一下小数的表示吧。


==========之前的文章==========
科普第1篇——计算机色彩
科普第1篇补遗——CSS颜色
科普第2篇——光盘
科普第3篇——2、8、10、16
科普第4篇——电池
科普第5篇——浏览器
科普第6篇——字符编码
科普第7篇——加密解密
科普第8篇——移动通信技术
科普第9篇——为什么32位CPU不能支持大于4GB内存?
科普第10篇——智能手机简介
科普第11篇——14.52-14.49=0.0299999?
科普第12篇——为什么HTTPS会更安全?
科普第13篇——计算机语言
科普第14篇——字体(上)
科普第15篇——字体(中)
科普第16篇——字体(下)
科普第17篇——域名解析
科普第17篇补遗——域名
科普第18篇——虚拟内存
科普第19篇——时间
科普第20篇——日期
科普第21篇——日期时间补遗及计算机的时间
科普第22篇——网络(0):基本概念
科普第23篇——二进制的线性编码
科普第24篇——网络(1):OSI模型
科普第25篇——外部接口(第一次修订)
科普第26篇——计算机是怎样做加法的
科普第27篇——计算机是怎样做加减法的
科普第28篇——计算机是怎样处理负数的

科普番外篇1——虽然没用但了解一下也很有趣的知识
科普番外篇2——月食
喜欢0 评分0
esc
esc
光坂学士生
光坂学士生
  • 注册日期2011-10-05
  • 最后登录2020-05-31
  • 生日1993-4-7
  • 光玉2440颗
沙发#
发布于:2012-08-09 18:24
看到这就想到C语言 想到C语言就头痛.....
回复(0) 喜欢(0)     评分
莫娜の狼
学生会会长
学生会会长
  • 注册日期2012-03-15
  • 最后登录2023-11-05
  • 生日1993-5-31
  • 光玉3633颗
2楼#
发布于:2012-08-09 18:36
= = 最近一直在纠集运算呢……头疼……
回复(0) 喜欢(0)     评分
银黑劫火
学生会干部
学生会干部
  • 注册日期2012-07-03
  • 最后登录2015-06-15
  • 生日1993-4-3
  • 光玉2216颗
3楼#
发布于:2012-08-09 18:46
为下学期的c语言打打基础
回复(0) 喜欢(0)     评分
圣火之灵
光坂基金会
光坂基金会
  • 注册日期2009-10-19
  • 最后登录2016-01-23
  • 生日1989-2-1
  • 光玉2503颗
4楼#
发布于:2012-08-09 20:59
过来学习一下,谢谢分享!
平凡快乐的活着~!
回复(0) 喜欢(0)     评分
iejr
光坂大学生
光坂大学生
  • 注册日期2012-01-14
  • 最后登录2016-02-06
  • 生日1992-3-4
  • 光玉1560颗
5楼#
发布于:2012-08-09 22:26
。。。今天又長知識了,知道了原理後就可以用單片機和矩陣鍵盤做一個簡易計算器了嗯。。。
回复(0) 喜欢(0)     评分
消失的旅人
光坂基金会
光坂基金会
  • 注册日期2009-05-27
  • 最后登录2019-05-12
  • 生日1991-10-1
  • 光玉2895颗
6楼#
发布于:2012-08-10 05:29
回 3楼(银黑劫火) 的帖子
这个算是数字电路的范畴吧
回复(0) 喜欢(0)     评分
双月的骑士
学生会干部
学生会干部
  • 注册日期2012-02-12
  • 最后登录2023-04-25
  • 生日1994-9-5
  • 光玉5089颗
7楼#
发布于:2012-08-11 13:52
对这类没啥兴趣啊。看着就头晕
恐惧并不是胆小,而是明白自身的弱小!
2013年春季新番动画一览
回复(0) 喜欢(0)     评分
游客

返回顶部