关于补码与booth算法的想法与逻辑推导

在学习计组的过程中,发现不论是书中还是许多考研视频都对与booth的原理讲解地不清楚,昨天看完第二天看了看大佬写的博客,结合自己的总结,研究了一下他的来龙去脉。
主要是昨天看了龙樱2第三集 (笑

先要聊聊补数与求模运算

考虑下面的式子
x=qm+r

-5=-1*14+9

9=0*14+9

23=1*14+9

不难发现,如果换成除法来看的话,m为除数(模数),x为被除数,q为结果,9为余数。
同时不考虑结果,也可以看成求模运算。
从求模运算的角度来看,不论是-5,9,23他们几个小崽子都是等价的,同时,我们可以发现,他们的差值都为14(这个很重要,下面会说明)

再康康补码

我们都知道,在计算机的骚0和直1的二进制中,补码的出现是为了解决带符号,也就是负数加减问题,其计算方法为非符号位取反然后再加个1,下面探究机制和原理。
举个例子
如果我们要实现14-14=0,在二进制中,表现为

00001110
+
10001110
可以发现,由于我们取了符号位,这样算会越算越骚,那怎么办呢?

大家可以看看我们前面所提到的模运算,他们在求模的情况下是等价的,然而最骚的是,我们居然还发现-5的绝对值加上9就等于他的模14。聪明的你一定会在感觉上就刚刚好可以用来解决这个越算越骚的问题。
补数补数,就是指的补来的数
模-a的绝对值=a的补数
而如果是二进制的话如果我们将模设置为9bit,小机灵鬼也该猜到了
100000000-00001110=11110010
出于二进制骚0与阿1的性质,其补数还刚好等于以及我们以上的分析,对于负数值而言,其补数还刚好是一个正数
而有些朋友又要问了,那不是越减越大吗?我们可以神奇的发现,如果我们将字节宽度设定为8bite,如果算出来是9bite的话,多的高位刚好溢出不要。大家可以思考一下,如果模是100000000,以14-14为例,原码加上负数的补码刚刚好等于模,而模的最高位溢出后刚好等于00000000。这也是我在前面提及一正一负这两个例子的原因。

举个例子 88-66=01011000-01000010=01011000+10111110=100010110=34
从10进制来看的话,模自然就是100了
那么上式用补码的思想,可以写为88+66-100=34
然而聪明的大脑可以简单地使用减法,补码的思想是没有必要的, 而计算机太瓜

乘法与booth算法

探讨完补码的问题,下面再探讨一下乘法。

这里直接借一下大佬的图片,


大家可以看到,由于0是很骚的,任何一个1与0相乘都会变为0(意味深)
那么我们不如直接就跳过一长串零,这样的话变骚的几率就会大大减小(不是)
比如,x*y 在我们算10100001×00111110,可以将乘数00111110改写为01000000 - 00000010,原式变为10100001×(01000000-0000010)这样就大大减少了运算难度。
则10100001×01000000 + 10100001×00000010

此时我们暂时忽略补码思想饶过计算机一码,直接加起来:10100001 × 01000010 这样就方便表示
但当我们在实际运算中,我们的运算原理还是基于拆开各算各的(不然就错了),但如果我们按照这样的表示按照补码思想总结规律
细心的你又发现了,在将00111110改写为01000000 - 00000010时,又是出于二进制骚0和阿1的性质,01000000和00000010都只存在一位为1。
所以对于合起来的10100001 × 01000010,我们可以总结出规律,
为00或者为11的时候(11抵消了),直接右移一位
为01的时候,加x,然后右移一位 (读者可以自己分析,因为前为正后为负)
为10的时候,加-x(补码思想),然后右移一位 (同样)
而由于上述的过程推导包含于符号位,所以说补码的运算也可以同样使用例如用负数*负数。
于是,我们不仅仅计算的二进制数变得更简洁,同时可以双位地进行运算。
在实际运算中,涉及到了辅助位与双符号位,有兴趣的友友们可以自己去康康。

以上。

关于补码与booth算法的想法与逻辑推导相关推荐

  1. 补码一位乘法——布斯(Booth)算法

    布斯Booth算法 "乘积"均改为"部分积".

  2. booth算法实现乘法器

    booth算法充分的利用到了补码的重要性,使得我们在利用补码进行计算时减少了很多时序.下面的表格是我们假设2 作为乘数所进行的分析.接下来,我将用代码向大家阐述. 1.开始的时候在乘数2的'负一位'加 ...

  3. 加减法、原码一位乘法、Booth算法、恢复余数法、加减交替法符号位及小结

    在学习计算机组成原理的计算方法时,或为步骤疑惑,或为题目难倒,本文主要介绍思路以及对常用类型小结 个人总结,仅供参考,能力有限,难免出错,欢迎大家讨论,书籍参考唐朔飞版<计算机组成原理> ...

  4. C语言布斯乘法算法,布斯Booth算法带符号位的乘法verilog语言实现booth算法

    Booth算法的推倒表示看不懂,举例说明:算法的计算过程. 求M*Q的值 M=5,Q=6 按二进制分解M和Q :M3M2M1M0×Q3Q2Q1Q0: 0110×0101 (有符号数用补码表示,最高位表 ...

  5. BOOTH 算法的简单理解

    学习FPGA时,对于乘法的运算,尤其是对于有符号的乘法运算,也许最熟悉不过的就是 BOOTH算法了. 这里讲解一下BOOTH算法的计算过程,方便大家对BOOTH的理解.        上图是BOOTH ...

  6. 进制+补码+位运算+算法

    进制+补码+位运算+算法 张明阳 1.简述进制的定义以及进制的重要性 N进制就是逢n进一 学习进制有助于学习汇编等底层知识,同时有助于学习补码和位运算等知识 2.简述十进制与r进制之间的转化,以及二进 ...

  7. Booth算法在局域网监控软件中运用的一个例子

    Booth算法是一种高效的二进制乘法算法,可用于在局域网监控软件中进行IP地址的匹配和查找.局域网监控软件通常需要对多台计算机进行监控和管理,而这些计算机的IP地址是关键的识别信息.使用Booth算法 ...

  8. 对反向传播算法(Back-Propagation)的推导与一点理解

    最近在对卷积神经网络(CNN)进行学习的过程中,发现自己之前对反向传播算法的理解不够透彻,所以今天专门写篇博客记录一下反向传播算法的推导过程,算是一份备忘录吧,有需要的朋友也可以看一下这篇文章,写的挺 ...

  9. [计算机组成原理] Booth算法 —— 补码一位乘法

    x * y = z 运算规则: 1.和原码一位乘法不同,补码一位乘法的符号位是参加运算的,且运算结果和所有参加运算的数都是补码形式. 2.乘数 x 取双符号位参与运算,部分积的初始值为0: 乘数 y ...

  10. 【计算机组成原理】定点乘法运算之补码一位乘法(Booth算法)

    x * y = z 讨论已知x和y的情况下,怎么通过补码一位乘法方法得出z- 首先说下运算规则- 和原码一位乘法不同的是,补码一位乘法的符号位是参加运算的~运算的所有的数包括得到的结果z都是补码的形式 ...

最新文章

  1. 经典相位法三维轮廓测量模型
  2. python中object转str_python的id()函数介绍 python怎么将objectid转为str
  3. 如何查看Android设备上的分区信息
  4. VS(C++)配置Halcon(一次配置,永久使用)
  5. excel列显示形式互换(字母与数字)
  6. 【类】变量复用,函数复用
  7. java 引用被回收_java GC 静态List 如果没有引用会被回收吗
  8. 微型计算机上的南桥芯片功能,微型计算机及接口技术2012年1月真题试题(04732)...
  9. Python学习笔记 -- 列表2: 遍历:嵌套列表, 将其中同位置的元素组成新的列表
  10. phpcmsV9视频模块插件 - 手把手开发教程
  11. ug中模型不见了怎么办_关于UG参数化建模的定义
  12. pandas 画折线图_如何从Pandas数据帧绘制多个折线图
  13. MySQL基础思维导图
  14. 使用 ODP.NET 访问 Oracle(.net如何访问Oracle)详解
  15. 向日葵远控远程代码执行漏洞工具
  16. 北理工计算机学院沈建斌,中国高校计算机大赛-团体程序设计天梯赛全国总决赛获奖.doc...
  17. NYOJ54-小明的存钱计划
  18. window10系统onedrive无法登陆 ox8004def7
  19. 支持向量机是怎么画分类平面的?
  20. 力扣(104.101)补9.7

热门文章

  1. PR短视频转场预设 60个摇晃抖动效果过渡合集
  2. 华为手机上的网上邻居怎么用_华为手机上的网上邻居怎么用_HUAWEI Mate 8 网络邻居 使用教程...
  3. Uhuntu搜狗拼音输入法安装详细过程
  4. 计算机字体管理软件,字体管理软件有哪些?字体管理软件推荐
  5. 中国智能燃气表行业发展态势分析及投资风险评估报告2022-2028年版
  6. 中维云视通网络监控系统
  7. android 开源gis,开源GIS之--移动GIS
  8. 人力资源管理系统概要设计说明书
  9. Oracle数据库练习题(3)
  10. 关于6月20日PMP认证考试准考信下载及考场规定的通知