计算机应用乘法,计算机系统原理(十) 二进制整数的乘法运算和除法运算

2.5我们着重介绍了二进制整数的加、减运算,本次我们继续介绍乘、除运算。本章是迄今为止最难的一章,希望各位猿友有所收获,也别忘了“点个推荐哦”。

引言

运算一直是程序运行当中一个重要的环节,而在二进制的运算过程当中,加法运算又是重中之重,它基本上奠定了二进制运算的基础。因为无论是减法还是乘法,都可以由加法运算来替代,唯有除法不能由加法替代。

了解计算机运算的规律,可以有助于我们理解很多程序代码上无法理解的内容。比如上章提到的溢出问题,在了解了加法运算的原理之后,相信猿友们都可以轻松的知道为何有些运算会得到意想不到的结果。

这里还需要提一点的是,不同的处理器所采取的运算方式可能是有细微的差别的,因此也不能一概而论。因此我们大多时候会尽量讨论运算的抽象数学特性,抽象的东西大部分时候总是可靠的,这种特性为跨平台提供了基础,不过也并非总是如此,毕竟LZ只听说过浮点数运算标准,还没听说过整数运算标准,不知道究竟是LZ孤陋寡闻了,还是确无此物。

正因如此,我们了解一下这些运算的抽象性,会有助于我们理解程序代码级无法理解的东西。

无符号乘法

无符号的乘法与加法类似,它的运算方式是比较简单的,只是也可能产生溢出。对于两个w位的无符号数来说,它们的乘积范围在0到(2w-1)2之间,因此可能需要2w位二进制才能表示。因此由于位数的限制,假设两个w位的无符号数的真实乘积为pro,根据截断的规则,则实际得到的乘积为 pro mod 2w。

补码乘法

与加法运算类似,补码乘法也是建立在无符号的基础之上的,因此我们可以很容易的得到,对于两个w位的补码数来说,假设它们的真实乘积为pro,则实际得到的乘积为 U2Tw(pro mod 2w)。

上面的式子我们有一个假设,就是假设对于w位的两个补码数来说,它们的乘积的低w位与无符号数乘积的低w位是一样的。这意味着计算机可以使用一个指令执行无符号和补码的乘法运算。

在书中给出了这一过程的证明,我们来大概看一下,这里主要应用了无符号编码和补码编码的关系,其中x’和y’分别代表x和y的补码编码。

这里运用的主要技巧就是2w mod 2w = 0。

乘法运算的优化

根据我们小学所学的乘法运算,我们知道,假设两个w位的二进制数相乘,则需要进行w次与运算,然后进行w - 1次加法运算才能得到结果。从此不难看出,乘法运算的时间周期是很长的。因此计算机界的高手们想出了一种方式可以优化乘法运算的效率,就是使用移位和加法来替代乘法。

上述优化的前提是对于一个w位的二进制数来说,它与2k的乘积,等同于这个二进制数左移k位,在低位补k个0。在书中对这一等式进行了证明,过程如下。

这个过程主要应用了无符号编码的公式,各位猿友应该不难看懂。

有了上面的基础,我们就可以使用移位和加法对乘法优化了。对于任意一个整数y,它总能使用二进制序列表示(假设不超过二进制的表示范围),因此我们可以将x和y乘积的二进制序列表示为如下形式(此公式在书中没有展现)。

x * y = x * (yw-12w-1 + ... + y020) =  (x << w-1) * yw-1 +....+ (x << 0 ) * y0

我们举个例子,对于x * 17,我们可以计算x * 16 + x = (x << 4) + x ,这样算下来的话,我们只需要一次移位一次加法就可以搞定这个乘法运算。而对于x * 14,则可以计算 x * 8 + x * 4 + x * 2 = (x << 3) + (x << 2) + (x << 1) ,更快的方式我们可以这么计算,x * 16 - x * 2 = (x << 4) - (x << 1) 。

这里最后需要提一下的是,加法、减法和移位的速度并不会总快于乘法运算,因此是否要进行上面的优化就取决于二者的速度了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304220.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3 年工作经验程序员应有的技能

前言因为和同事有约定再加上LZ自己也喜欢做完一件事之后进行总结&#xff0c;因此有了这篇文章。这篇文章大部分内容都是面向整个程序员群体的&#xff0c;当然因为LZ本身是做Java开发的&#xff0c;因此有一部分内容也是专门面向咱们Java程序员的。第二阶段&#xff1a;五年五…

应急响应中的溯源方法

在发现有入侵者后&#xff0c;快速由守转攻&#xff0c;进行精准地溯源反制&#xff0c;收集攻击路径和攻击者身份信息&#xff0c;勾勒出完整的攻击者画像。 对内溯源与对内溯源 对内溯源&#xff1a;确认攻击者的行为 &#xff0c;分析日志 数据包等&#xff1b; 对外溯源&…

POP3口令扫描案例

通过本案例可以学到&#xff1a; (1)了解POP3有关知识(2)利用Hscan工具软件来破解POP3账号和口令现在很多邮箱服务器都支持POP3功能&#xff0c;通过POP3来收取信件&#xff0c;收取信件时仅仅需要提供用户名和密码。目前有很多工具可以扫描POP3邮件账号和口令&#xff0c;本案…

中connect怎么用_烘焙中的各种酒,到底该怎么用?

​在烘焙食谱中&#xff0c;经常会出现“酒”这样材料。烘焙中的酒&#xff0c;仿佛是个神秘的存在&#xff0c;品种也繁多得让人一脸懵逼&#xff0c;朗姆酒是干嘛用的&#xff1f;怎么还有分白朗姆和金朗姆&#xff1f;和利口酒有什么区别&#xff1f;利口酒和力娇酒是同一个…

QQ旋风爆缓冲区溢出漏洞

据金山毒霸安全实验室5月7日透露&#xff0c;金山毒霸安全实验室研究人员进行例行漏洞检查过程中&#xff0c;发现QQ旋风存在一鲜为人知的缓冲区溢出0day漏洞&#xff0c;***者可以利用该漏洞制造恶意URL&#xff0c;使用IE6&#xff0c;7内核的各种浏览器均会受此漏洞的影响。…

w10计算机无法打印,win10升级后惠普无法打印怎么解决_win10升级后惠普打印不了的处理办法...

使用电脑工作或学习时&#xff0c;我们经常会需要用到打印机。可是最近有一些网友却反映说&#xff0c;自己的win10电脑在升级后出现了惠普无法打印的情况&#xff0c;这是怎么一回事呢&#xff1f;我们又该怎么解决呢&#xff1f;用户不是很清楚&#xff0c;所以对此今天本文为…

女神节爆猛料!. NET程序员男女比例公布!

今天是三八女神节&#xff0c;这里先祝广大的程序员妹子们节日快乐&#xff0c;健康美丽&#xff01;有一个问题&#xff0c;相信很多.NET程序员都很感兴趣&#xff1a;.NET程序员中女生占比多少&#xff1f;先来公布答案&#xff1a;在本次调查中发现&#xff0c;.NET程序员群…

金蝶凭证序时簿在哪_来了!金蝶日常账务处理大全

上一期给宝宝们更新了金蝶软件建账的一些处理流程&#xff0c;宝宝们已经迫不及待要求后续了。在日常处理部分主要是以下几个方面一、凭证审核1.凭证录入点击主窗口中的【凭证】&#xff0c;单击【凭证】录入在凭证录入窗口中单击【凭证录入】按钮&#xff0c;在这个窗口中就可…

在C#中使用SQLite

SQLite 是一个嵌入式的关系数据库系统&#xff0c;使用十分广泛。在一些数据量不大的应用程序中&#xff0c;如果使用SQLite可以极大的减少部署时的工作量。 要在C#中使用SQLite也很简单&#xff0c;只要找一个C#的wrapper就可以了&#xff0c;例如&#xff0c;我使用的就是来自…

BI 界震动 - Power BI Premium 个人版只要每月 120 元

大事来了就在今天&#xff0c;微软宣布&#xff1a;Power BI Premium Per User 定价&#xff1a;每月 120 元人民币。我只能说&#xff1a;他没有骗人。Power BI 团队也在这个战略决策上符合了微软的核心使命。这一举措将更加彻底的巩固微软 Power BI 的商业智能帝国地位&#…

西北工业大学计算机毕业论文,光纤通信发射机本科毕业论文 西北工业大学.docx...

光纤通信发射机本科毕业论文 西北工业大学本科毕业设计论文 PAGE 41摘 要 直接调制光发射机能完成对电信号的处理&#xff0c;其功能是把电脉冲信号变成光脉冲信号。本文先介绍了光纤通信的发展背景&#xff0c;光纤相对于传统铜导线的优越性&#xff0c;以及光纤通信未来的发展…

用 Python 实现一个大数据搜索引擎

搜索是大数据领域里常见的需求。Splunk和ELK分别是该领域在非开源和开源领域里的领导者。本文利用很少的Python代码实现了一个基本的数据搜索功能&#xff0c;试图让大家理解大数据搜索的基本原理。布隆过滤器 &#xff08;Bloom Filter&#xff09;第一步我们先要实现一个布隆…

kuayu react_React+Spring实现跨域问题的完美解决方法

最近小编在学习react&#xff0c;在学习过程中遇到ReactSpring实现跨域问题&#xff0c;下面小编记录了整个问题过程&#xff0c;给大家做个参考。react 跨域访问后台&#xff0c;默认是有跨域问题&#xff0c;并且火弧和谷歌浏览器&#xff0c;对跨域问题展示还不一样.谷歌浏览…

奇妙的二叉树:Huffman的贡献

提起 Huffman 这个名字&#xff0c;程序员们至少会联想到二叉树和二进制编码。的确&#xff0c;我们总以 Huffman 编码来概括 D.A.Huffman 个人对计算机领域特别是数据压缩领域的杰出贡献。我们知道&#xff0c;压缩 模型 编码&#xff0c;作为一种压缩方法&#xff0c;我们必…

计算机专业暑期三下乡活动方案,暑期三下乡活动方案

要坚持立德树人&#xff0c;突出实践育人&#xff0c;引导广大青年在实践中受教育、长才干、作贡献&#xff0c;出国留学网小编整理了以下内容“大学生‘三下乡’实践活动方案”&#xff0c;供大家参考&#xff01;大学生“三下乡”实践活动方案一、活动主题扶贫建功青春行二、…

iNeuOS工业互联操作系统,图表与数据点组合成新组件,进行项目复用

目 录1. 概述... 12. 演示信息... 23. 应用过程... 21. 概述针对有些行业的数据已经形成了标准化的建模或者有些公司专注于某个领域&#xff0c;对于开发业务有很多情况需求进行复用&#xff0c;以前的版本和文章介绍了图元及数据点的组合形成新的图元进…

通过对象属性去重_Redis常见对象类型的底层数据结构

作者&#xff1a;伍陆七来源&#xff1a;cnblogs.com/chentianming/p/13838347.htmlRedis 是一个基于内存中的数据结构存储系统&#xff0c;可以用作数据库、缓存和消息中间件。Redis 支持五种常见对象类型&#xff1a;字符串(String)、哈希(Hash)、列表(List)、集合(Set)以及有…

按照演算,整个宇宙将会陷入无边的黑暗

导读&#xff1a;能量守恒定律告诉我们&#xff1a;能量既不会凭空产生&#xff0c;也不会凭空消失&#xff0c;它只会从一种形式转化为另一种形式&#xff0c;或者从一个物体转移到其它物体&#xff0c;而能量的总量保持不变。熵作为只增不减的物质&#xff0c;该怎么去理解它…

xp计算机启动检测硬盘,取消WinXP开机自检技巧五则

有时我们正常关闭计算机后&#xff0c;再次开机时发现系统会出现自行检测&#xff0c;这让许多XP用户们感到不方便&#xff0c;那么该怎么取消XP开机自检呢&#xff1f;下面就是具体的方法了&#xff0c;一起来看看吧。方法①&#xff1a;假如分区是FAT32格式&#xff0c;将其转…

Java ClassLoader

Java ClassLoader (1) – What is a ClassLoader? Java ClassLoader (2) – Write your own ClassLoader Java ClassLoader (3) – Namespaces Java ClassLoader (4) – Loading a custom ClassLoader on JVM start