《逻辑与计算机设计基础(原书第5版)》——1.4 算术运算

简介: 本节书摘来自华章计算机《逻辑与计算机设计基础(原书第5版)》一书中的第1章,第1.4节,作者:(美)M.莫里斯·马诺(M. Morris Mano)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.4 算术运算

r进制的算术运算方法和十进制类似。但是,在r进制的情况下,要特别注意只有r个基本数字可用,而且所有的计算是逢r进1。下面是两个二进制数的加法计算例子(注意做加法运算的操作数的名称):
image

除了每位的和只可能是0和1以外,二进制的加法和十进制的加法规则一样。当然,在二进制加法中,当某位的和大于1时就会产生进位(而在十进制中,只有当和大于9才会产生进位),进位都会加入到临近的高位。在第一个例子中,因为所有的进位都为0,所以和就相当于被加数与加数的各位简单相加。在第二个例子中,从右数第2列的两位的和是2,会向高位产生一个进位,而本位为0(2=2+0)。此进位参与第3位的加法运算,这样第3位的和则为3,同样要向高位产生一个进位,而本位则为1(3=2+1)。
下面是两个二进制数的减法运算过程(同样,注意操作数的名称):
image

二进制减法运算规则也和十进制一样,除了被减数某位向高位的借位相当于在本位加2(而十进制中一个借位相当于在本位加10)。在第一个例子中,没有任何借位发生,所以差只是被减数与减数按位简单相减。在第二个例子中,在最右列,由于被减数的该位是0,而减数的该位为1,所以必须向第2位借位,这样第一位的差就是1(2+0―1=1)。在第2位,由于它已被借位,值为0,而减数的第2位为1,所以它还须向第3位借位。如果被减数小于减数,我们就将减数减去被减数,在差的前面加上一个负号。第三个例子说明的就是这种情况,注意减数和被减数的位置被调换了。
最后要演示的是二进制的乘法计算,同样很简单。在二进制乘法中,乘数的数字非0即1。这样,部分乘积就是0或被乘数。下面是乘法的例子:
image

八进制、十六进制以及其他r进制数的算术运算都需要查询对应进制中位与位相加或相乘的结果对应表。一种更简单的办法是将r进制数中一列对应的位转换为十进制数,按十进制规则进行计算,这样我们就可以很方便地使用我们经常习惯使用的十进制计算表,计算完后,再将和以及进位转换回r进制。例1-2是用这种方法计算两个十六进制数59F与E46之和的步骤。
例1-2 十六进制数加法
计算(59F)16+(E46)16:
image

在例子右边等价的十进制的计算过程中,必须运用推理得出对应十六进制中的每一位。例如,在计算右边第一列的F+6时,我们转换成等价的十进制计算15+6=21,然后在转换回十六进制时,我们注意到21=16+5,所以,本位的结果为5,并向高位进1。其他两列的计算方法相同。 ■
总的来说,做两个r进制数的乘法计算时,每一步可以采用十进制的规则进行计算,同时将每一步的中间结果转换为r进制数。例1-3演示的是两个八进制数的乘法。
例1-3 八进制乘法
计算(762)8×(45)8:
image

上图右边演示的是每一对八进制位的心算过程。八进制的0~7的数字和十进制中相对应的数字是一样的。每一对八进制数位的相乘以及加上低位的进位,都可以按十进制的计算方法进行,然后再将这一步的结果转换回八进制,如果结果是两位的八进制数,则高位就是本列的进位,低位就是本列的计算结果。例如,(5×2)8=(12)8,结果中的高位1作为进位加入(5×6)8的计算结果,低位的2就是本列的八进制计算结果。乘数最高位的进位可直接作为乘积中下一位的结果,比如46中的4。 ■
十进制数转换为其他进制数
之前我们采用多项式展开的方法将其他进制的数转换为十进制数。现在我们采用一种通用的过程将十进制数转换为r进制数。如果待转换的数中有小数点,我们要将这个数分成整数部分与小数部分,两个部分的转换要分别进行。通过采用短除法可以将十进制整数转换成r进制数,步骤就是不断用r除要转换的十进制数以及每步产生的商,直至最后的商等于0,每一步所得到的余数就可构成所要转换的结果,其过程可以用例1-4具体说明。
例1-4 十进制整数转换为八进制数
将十进制数153转换为八进制数:
基底为8。首先,用8除153,商为19,余数为1。然后,继续用8除19,商为2,余数为3。最后,用8除2,商为0,余数为2。每一步的余数就可构成我们想要得到的八进制数的位。
image

注意,在例1-4中,余数从最后到第一,按逆序构成转换数的高位到低位,如箭头所指。商不断地被r除直到为0。同样,可以采用这种方法,将十进制数转换为二进制数,如例1-5所示。在这个例子当中,r是2,所以短除法中的除数是2。
例1-5 十进制整数转换为二进制数
转换十进制数41为二进制数:
image

当然,反过来,将二进制数按2的指数多项式展开求和就能得到对应的十进制数。

            (41)10=32+8+1=(101001)2                 ■

将十进制小数转换为r进制形式的方法和整数的转换方法有所不同,称为“连乘法”,也就是不断地用r乘以要转换的十进制小数,每次相乘得到的结果的整数部分构成转换结果的对应的位。这种方法可以用例1-6说明。
例1-6 十进制小数转换为二进制形式
将十进制小数0.6875转换为二进制数:
首先,将0.6875乘以2,结果中有整数与小数,再将新的小数与2相乘,又得到新的整数与小数,这样不断继续,直到小数部分为0或满足精确要求为止。二进制数中的位就由每步得到的整数部分构成,方法如下:
image

注意例子中每步得到的整数按箭头方向排列即可得到转换后的结果。在这个例子中,转换后的小数是有限的,但有时不断连乘并不能使小数部分变为0,这时必须决定需要多少位小数才能满足精确度的要求。由于转换的方法是用r进行连乘,那么将十进制小数转换为八进制形式,就得用8来连乘,如例1-7所示。
例1-7 十进制小数转换为八进制形式
将十进制小数0.513转换为小数位为3位的八进制形式:
image

转换结果中的3位数由每步的整数来构成,我们连乘4次,得到4个整数,注意到最低的一位整数为5,在八进制中按取整法(即类似十进制中的四舍五入),向次低位6进一位,这样就得到:

                (0.513)10=(0.407)8                  ■

如果待转换的数中既有整数部分又有小数部分,就可以将两部分分别转换,最后组合形成结果。比如,采用例1-4和例1-7的结果,我们可以得到:
(153.513)10=(231.407)8

相关文章
|
数据可视化 Linux 开发者
Processing有哪些常见的用途或者优势呢
Processing有哪些常见的用途或者优势呢
738 0
|
11月前
|
传感器 人工智能 大数据
高科技生命体征探测器、情绪感受器以及传感器背后的大数据平台在健康监测、生命体征检测领域的设想与系统构建
本系统由健康传感器、大数据云平台和脑机接口设备组成。传感器内置生命体征感应器、全球无线定位、人脸识别摄像头等,搜集超出现有科学认知的生命体征信息。云平台整合大数据、云计算与AI,处理并传输数据至接收者大脑芯片,实现实时健康监测。脑机接口设备通过先进通讯技术,实现对健康信息的实时感知与反馈,确保身份验证与数据安全。
|
11月前
|
存储 供应链 监控
反向海淘中下单、支付方式、订单、库存管理、物流与配送
反向海淘指海外消费者通过跨境电商平台购买中国商品。其流程包括:1) 海外消费者在支持多语言和货币的平台上选品、加入购物车并填写准确收货信息下单;2) 支付方式涵盖国际信用卡、第三方支付平台(如PayPal)、本地支付及电子钱包;3) 订单管理涉及订单确认、拣货包装、发货跟踪及售后处理,并通过数据分析优化库存与销售;4) 库存管理强调实时监控、多渠道同步、预警补货及滞销处理;5) 物流方案提供国际快递、邮政包裹、专线物流和海外仓等多种选择,确保全程跟踪和清关服务。
|
人工智能 搜索推荐 安全
人工智能在医疗领域的最新进展与未来趋势
人工智能在医疗领域的最新进展与未来趋势
|
Web App开发 数据安全/隐私保护 Windows
【Windows】谷歌翻译停服后,chrome无法自动翻译?解决办法来了~ (最新)
【Windows】谷歌翻译停服后,chrome无法自动翻译?解决办法来了~ (最新)
461 0
|
消息中间件 存储 缓存
聊聊 Kafka:Kafka 消息重复的场景以及最佳实践
聊聊 Kafka:Kafka 消息重复的场景以及最佳实践
1087 0
docx设置保存的word文档字体及大小
一般我是要将文件保存为这种形式我会使用
277 0
基因测序的原理是什么
基因测序的原理是什么
|
数据采集 机器学习/深度学习 算法
大数据分析案例-基于RFM模型对电商客户价值分析(聚类)
大数据分析案例-基于RFM模型对电商客户价值分析(聚类)
2078 0
大数据分析案例-基于RFM模型对电商客户价值分析(聚类)
|
存储 Android开发
方法:一键把一堆手机号码一次性快速导入手机通讯录
手机是人们日常沟通常用的工具,所以自然就要用到手机里面的通讯录联系。因此我们常要把别人的号码存入到手机通讯录里面,如果只是存五个十个那就动动手指就可以了。但是如果你想存把一个电脑excel表格里面的几百个、几千个、几万个等数量级别的联系人一键导入手机通讯录,显然手动一个个来存入是不现实的。我这里演示,通过借助网上常见的便捷工具软件,金芝号码提取导入助手,代替你手动工作来快速完成这个工作,如何一键把一堆手机号码一次性快速导入手机通讯录,省事省时省力。下面做个操作过程的图文讲解。
4940 0
方法:一键把一堆手机号码一次性快速导入手机通讯录