热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

计算机乘法原理移位,原码乘法,原码乘法原理详解

原码乘法,原码乘法原理详解1.人工算法与机器算法的同异性在定点计算机中,两个原码表示的数相乘的运算规则是:乘积的符号位由两数的符号位按异或运算得到,而乘

原码乘法,原码乘法原理详解

1.人工算法与机器算法的同异性

在定点计算机中,两个原码表示的数相乘的运算规则是:乘积的符号位由两数的符号位按异或运算得到,而乘积的数值部分则是两个正数相乘之积。

设n位被乘数和乘数用定点小数表示(定点整数也同样适用)

被乘数   [x]原=xf .xn-1…x1x0

乘数     [y]原=yf .yn-1…y1y0

则乘积

[z]原=(xf⊕yf)+(0.xn-1…x1x0)(0.yn-1…y1y0)    (2.26)

式中,xf为被乘数符号,yf为乘数符号。

乘积符号的运算法则是:同号相乘为正,异号相乘为负。由于被乘数和乘数和符号组合只有四种情况(xfyf=00,01,10,11),因此积的符号可按“异或”(按位加)运算得到。

数值部分的运算方法与普通的十进制小数乘法类似,不过对于用二进制表达式的数来说,其乘法规则更为简单一些。

设x=0.1101,y=0.1011.让我们先用习惯方法求其乘积,其过程如下:

b52222734b0b20ada581a1b25b74c6fb.gif

运算的过程与十进制乘法相似:从乘数y的最低位开始,若这一位为“1”,则将被乘数x写下;若这一位为“0”,则写下全0。然后在对乘数y的最高为进行乘法运算,其规则同上,不过这一位乘数的权与最低位乘数的权不一样,因此被乘数x要左移一位。以此类推,直到乘数个位乘完为止,最后将它们统统加起来,变得到最后乘积z。

如果被乘数和乘数用定点整数表示,我们也会得到同样的结果。

人们习惯的算法对机器并不完全适用。原因之一,机器通常只有n位长,两个n位数相乘,乘积可能为2n位。原因之二,只有两个操作数相加的加法器难以胜任将各n位积一次相加起来的运算。早期计算机中为了简化硬件结构,采用串行的1位乘法方案,即多次执行“加法—移位”操作来实现。这种方法并不需要很多器件。然而串行方法毕竟太慢,自从大规模集成电路问世以来,出现了各种形式的流水式阵列乘法器,它们属于并行乘法器。

f934d081e4cfc3d3c33112c21020a0d0.gif  

图2.4 m×n位不带符号的阵列乘法器逻辑图

2.不带符号的阵列乘法器

设有两个不带符号的二进制整数:

A=am-1…a1a0

B=bn-1…b1b0

它们的数值分别为a和b,即

db86a65b28d12e26b29d1d434b6cf82e.png

在二进制乘法中,被乘数A与乘数B相乘,产生m+n位乘积P:

P=pm+n-1…p1p0

乘积P 的数值为

0ea0d8d92d5aa28ef2451e9ae4f4770f.gif

  实现这个乘法过程所需要的操作和人们的习惯方法非常类似:9ea90406fe651f7eea844623b8350e99.gif

上述过程说明了在m位乘n位不带符号整数的阵列乘法中,“加法—移位”操作的被加数矩阵。每一个部分乘积项(位积)aibj叫做一个被加数。

这m×n个被加数{aibj|0≤i≤m-1和0≤j≤n-1}

可以用m×n个“与”门并行地产生。显然,设计高速并行乘法器的基本问题,就在于缩短被加数矩阵中每列所包含的1的加法时间。

这种乘法器要实现n位×n位时,需要n(n-1)个全加器和n2个“与”门。该乘法器的总的乘法时间可以估算如下:

令Ta为“与门”的传输延迟时间,Tf为全加器(FA)的进位传输延迟时间,假定用2级“与非”逻辑来实现FA的进位链功能,那么我们就有:

Ta = Tf = 2T

从演示中可知,最坏情况下延迟途径,即是沿着矩阵P4垂直线和最下面的一行。因而得n位×n位不带符号的阵列乘法器总的乘法时间为:

tm=Ta+(n-1)×6T+(n-1)×Tf

=2T+(n-1)×6T+(n-1)×2T=(8n-6)T     (2.27)

[例16] 已知两个不带符号的二进制整数A=11011,B=10101,求每一部分乘积项aibj的值与p9p8……p0的值。

[解:]

41b3d4c80335659fc31b6b8e8cf57d41.gifa4b0=1 a3b0=1 a2b0=0 a1b0=1 a0b0=1  

a4b1=0 a3b1=0 a2b1=0 a1b1=0 a0b1=0

a4b2=1 a3b2=1 a2b2=0 a1b2=1 a0b2=0

a4b3=0 a3b3=0 a2b3=0 a1b3=0 a0b3=0

a4b4=1 a3b4=1 a2b4=0 a1b4=1 a0b4=1

P=p9p8p7p6p5p4p3p2p1p0=1000110111(56710)

3.带符号的阵列乘法器

(1) 对2求补器电路

我们先来看看算术运算部件设计中经常用到的求补电路。一个具有使能控制的二进制对2求补器电路图,其逻辑表达式如下:

C-1=0,  Ci=ai+Ci-1

ai*=ai⊕ECi-1,   0≤i≤n

在对2求补时,要采用按位扫描技术来执行所需要的求补操作。令A=an…a1a0是给定的(n+1)为带符号的数,要求确定它的补码形式。进行求补的方法就是从数的最右端a0开始,,由右向左,直到找出第一个“1”,例如ai=1, 0≤i≤n。这样,ai以左的每一个输入位都求反,即1变0,0变1。最右端的起始链式输入C-1必须永远置成“0”。当控制信号线E为“1”时,启动对2求补的操作。当控制信号线E为“0”时,输出将和输入相等。显然,我们可以利用符号位来作为控制信号。

例如,在一个4位的对2求补器中,,如果输入数为1010,那么输出数应是0110,其中从右算起的第2位,就是所遇到的第一个“1”的位置。用这种对2求补器来转换一个(n+1)为带符号的数,所需的总时间延迟为

tTC=n·2T+5T=(2n+5)T      (2.28)

其中每个扫描级需2T延迟,而5T则是由于“与”门和“异或”门引起的。

(2) 带符号的阵列乘法器

(n+1)×(n+1)位带求补器的阵列乘法器逻辑方框图

f7a9fcc631ae17e263bc3380e078bd82.png

通常,把包括这些求补级的乘法器又称为符号求补的阵列乘法器。在这种逻辑结构中,共使用三个求补器。其中两个算前求补器的作用是:将两个操作数A和B在被不带符号的乘法阵列(核心部件)相乘以前,先变成正整数。而算后求补器的作用则是:当两个输入操作数的符号不一致时,把运算结果变成带符号的数。

设A=anan-1…a1a0和B=bnbn-1…b1b0均为用定点表示的(n+1)位带符号整数。在必要的求补操作以后,A和B的码值输送给n×n位不带符号的阵列乘法器,并由此产生2n位真值乘积:

A·B=P=p2n-1…p1p0

p2n=an⊕bn

其中P2n为符号位。

上面所示的带求补级的阵列乘法器既适用于原码乘法,也适用于间接的补码乘法。不过在原码乘法中,算前求补和算后求补都不需要,因为输入数据都是立即可用的。而间接的补码阵列乘法所需要增加的硬件较多。为了完成所必需的乘法操作,时间大约比原码阵列乘法增加1倍。

[例17] 设x=+15,y=-13,用带求补器的原码阵列乘法器求出乘积x·y=?

[解:]

设最高位为符号位,则输入数据为

[x]原=01111  [y]原=11101

符号位单独考虑,算前求补级后 |x|=1111,|y|=1101

8f86f944749509609c85f424ae1813e3.gif

算后经求补级输出并加上乘积符号位1,则原码乘积值为111000011。

换算成二进制数真值是

x·y=( -11000011)2=(-195)10

十进制数验证:x×y = 15× (-13) = -195相等。

[例18] 设x=+15,y=-13,用带求补器的补码阵列乘法器求出乘积x·y=?

[解:]

设最高位为符号位,则输入数据用补码表示为

[x]补=01111    [y]补=10011

符号位单独运算,x0⊕y0=0+1=1

尾数部分算前求补器输出为: |x|=1111,|y|=1101

b0468c616c16b1e9948624b507999be6.gif

算后求补器输出为00111101,加符号位1,得

[x·y]补=100111101

补码二进制数真值是

x·y=-1×28+1×25+1×24+1×23+1×22+1×20=(-195)10

十进制数验证:     x×y=(+15)×(-13)=-195相等。



推荐阅读
  • SSE图像算法优化系列三:超高速导向滤波实现过程纪要(欢迎挑战)
    自从何凯明提出导向滤波后,因为其算法的简单性和有效性,该算法得到了广泛的应用,以至于新版的matlab都将其作为标准自带的函数之一了&#x ... [详细]
  • 本文介绍了使用Python和C语言编写程序来计算一个给定数值的平方根的方法。通过迭代算法,我们能够精确地得到所需的结果。 ... [详细]
  • 社会网络分析学习笔记 - 模块4
    本文探讨了小世界现象及其在社交网络中的应用,包括厄多斯数和培根数的概念。文章还介绍了图的基本表示方法,如边列表和邻接矩阵,并讨论了它们在不同规模网络中的适用性和效率。 ... [详细]
  • 该问题描述了以不同价格购买三种类型的鸡(公鸡、母鸡和小鸡),使用100元恰好购买100只鸡的不同组合。具体而言,每只公鸡价值5元,每只母鸡价值3元,而每三只小鸡价值1元。问题是,如何用100元购买100只鸡,并找出所有可能的公鸡、母鸡和小鸡的组合。 ... [详细]
  • 汇总了2023年7月7日最新的网络安全新闻和技术更新,包括最新的漏洞披露、工具发布及安全事件。 ... [详细]
  • 使用Python构建网页版图像编辑器
    本文详细介绍了一款基于Python开发的网页版图像编辑工具,具备多种图像处理功能,如黑白转换、铅笔素描效果等。 ... [详细]
  • 本文将详细介绍Fuel CMS如何基于CodeIgniter框架构建,包括其单入口模式的实现方式及关键配置文件的作用。通过分析本地环境中的index.php和.htaccess文件,我们将更好地理解Fuel CMS的核心架构。 ... [详细]
  • 本文介绍了Tomcat的基本操作,包括启动、关闭及首次访问的方法,并详细讲解了如何在IDEA中创建Web项目,配置Servlet及其映射,以及如何将项目部署到Tomcat。 ... [详细]
  • 笔记说明重学前端是程劭非(winter)【前手机淘宝前端负责人】在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系& ... [详细]
  • 【MySQL】frm文件解析
    官网说明:http:dev.mysql.comdocinternalsenfrm-file-format.htmlfrm是MySQL表结构定义文件,通常frm文件是不会损坏的,但是如果 ... [详细]
  • 编程解析:CF989C 花朵之雾 (构造算法)
    本文深入探讨了CF989C '花朵之雾'问题的构造算法,提供了详细的解题思路和代码实现。 ... [详细]
  • 线性代数学习笔记——第六讲——矩阵的转置
    1.矩阵转置的定义(矩阵的行和列互换位置)2.矩阵转置的性质之一:矩阵转置一次后再转置一次,等于矩阵自身(有点 ... [详细]
  • 本文详细介绍了如何使用C#实现不同类型的系统服务账户(如Windows服务、计划任务和IIS应用池)的密码重置方法。 ... [详细]
  • ArcBlock 发布 ABT 节点 1.0.31 版本更新
    2020年11月9日,ArcBlock 区块链基础平台发布了 ABT 节点开发平台的1.0.31版本更新,此次更新带来了多项功能增强与性能优化。 ... [详细]
  • 1、编写一个Java程序在屏幕上输出“你好!”。programmenameHelloworld.javapublicclassHelloworld{publicst ... [详细]
author-avatar
袁立红第_593
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有