加油加油️哈哈哈ꉂꉂ(ᵔᗜᵔ*)
好的,那之前的小学中我们探讨了定点数的原码和补码的乘法如何实现,从这个学期开始我们要来探讨定点数的除法运算如何实现,首先我们会介绍除法运算的思想,接下来会介绍源码的两种除法实现方法,一种要恢复余数法,一种要不恢复余数法又叫加减交替法,那在下一个视频当中,我们又会介绍无码的除法啊,也是采用加减交替法的一个思想好,那首先来看一下大家熟悉的实际之处,法0.211÷0.985,那小时候我们做这样的除法,首先是会把这两个数的小数点进行一个处理,统一的向右移,三位小数点右移三位,那么就会变成211÷985,那这个除法大家都很熟悉了,那第1个商户们只能上0,因为我们上的这一位商和除数进行相乘之后,得到的这个结果不能大于当前的这个被除数好,这样我们可以得到一个余数211,并且在这个余数的后面添一个0,接下来第2步我们可以商2因为二者。那第2步我们可以商2,因为2×985刚好是不大于2110,但是又最接近2110的一个数值,所以这样得到1970再和之前的这个余数进行一个相减,得到一个三位的余数,接下来再在末位添一个零噢,那后续的都一样,总之每一步我们上的这一位商和除数的相乘的乘积,要尽可能的接近当前的余数,但是又不超过当前这个余数哦,那如果我们最终追求的这个伤只精确到小数点后面三位的话,啊,最终会留下一个余数210号,那现在问题是这样的,大家有没有想过为什么我们除法的竖式啊,小时候学的这种除法的竖式要这么计算,那这背后的原理和上一小节的乘法是类似的,我们可以从R进制数的一个数值的定义,从这个定义来出发我们可以把原本的零点二幺幺足以零九八五七是所谓的除法用被除数除以除数得到一个商业我们可以把原本的零点二幺幺足以零九八五七是所谓的除法用被除数除以除数得到一个商a211÷0.985写成这样的一个形式,所谓的除法用被除数除以除数,得到一个商a,然后最终剩余的余数是B,这背后的含义是说被除数X可以=a,也就是商乘以除数Y,然后再加上余数B,所以我们上边这个除法运算的结果,我们可以把它解释为0.211,也就是这个被除数等于除数0.985×这个商0.211,然后再加上最后的余数0.000210,大家可以验证一下,这个等式是成立的好,我们把最终得到的这个商按照位权展开,写成R进制的定义,这样的一个形式,那2×10的负一次方就是0.21×10的-2次方=0.01四乘以十三次方旧式零点零零四they零点二一四这个数零点二减零一零零四盒进行一个乡陈家。负和商进行一个相乘,那么0.985和上边我们展开的每一项进行一个组合,第1项的组合就相当于0.985×0.2这个乘法得到的结果是0.1970,而我们之前这一步得到的余数也就是剩余的,我们还需要拼凑的啊,这个数再减掉这一步,啊,拼凑上的0.1970=0.01400也就这个新的余数是我们接下来还剩余的,还需要继续拼凑的呃一个部分,所以接下来我们在拼凑上去的部分就是0.985×0.01也就和这一位的商进行一个相乘,得到的结果是0.00985,那这次拼凑和之前剩余的部分进行一个相减,又可以得到一个新的余数,于是下一位的商0.004×0.985,就是想要尽可能的拼凑出此时还剩余的这个部分,所以所谓的余数是目前还剩余的,我们还需要拼凑的部分。剩余的我们还需要拼凑的部分,我们可以这么来理解余数,而每一次我们上一个商其实就是想要尽可能的接近当前剩余的余数,但是又不超过这个余数,所以这就是小学学习的除法竖式,为什么要这样错位相减的一个原因,大家可以暂停再来琢磨一下,好,那接下来我们尝试着把10进制除法的这种运算思想,把它迁移到二进制这边,我们来看一个比较简单的例子,现在有X和Y这样的两个二进制数,并且这两个二进制数都是正数,那我们可以把除数和被除数分别乘以2的4次方,也就相当于呃分别把这个小数点都往后移,4位,也就变成了两个整数的相除,而现在我们模仿实际是除法的上商的一个规则,刚开始被除数有5倍,除数有5倍,那么由于被除数要小于除数,而我们上的伤只能是0或者1,并且这次上的这一位商和除数相城的一个成绩不能大于此时剩余的我们做的这个。上的这一位商和除数相乘的一个乘积,不能大于此时剩余的我们需要拼凑的这个部分,所以由于刚开始这个被除数是要小于除数的,因此我们只能上0,那0乘以除数等于5个0,我们可以得到一个4倍的余数啊,因为高位是0,所以我们可以把忽略得到这个4倍的余数之后再末位补一个0,好接下来10110这个余数要大于除数,所以下一位的伤我们可以上11乘,以除数得到的结果就是这个除数本身,那么之前的榆树减掉除术可以得到一个4位的榆树,接下来我们再在4位余数后面再添一个0,那接下来是类似的,此时剩余的余数要比我们的重数更大,所以这一次我们同样可以上商议,于是用这个余数减掉除术,可以得到啊,一个4位的榆树等等在末尾添0号,现在我们剩余的这个余数零一零一零要比除数更小而我们接下来上的这一微商和除数修正。接下来只能上升0,因此这儿得到的是5个零好一相减得到4个余数,再添一个0,最后我们上升一个1最终相减得到一个4倍的余数,好,那这是我们模仿实际这小数的除法啊,得到的一个结果,那和之前类似,如果我们把每一位商的位权给考虑进去,那这边我们得到的二进制竖式其实也可以写成这个样子,比如第2位的商相当于二进制的0.01×这个除数0.1101那2进制的0.01应该是=1×2的-2次方,所以除数乘以这位的商应该是除数的基础上,小数点再往前移两类,也就是0.001101,所以这一类的商和。再往前移两位,也就是0.001101,所以这位的商和除数相乘之后,我们得到的一个乘积结果就是0.001 101好,那其他未来商也是类似的一个原理,大家可以自己暂停来琢磨一下,最终我们得到这样的一个余数,所以X÷Y,我们得到的结果是0.1101余数是啊,这样的一个值大家可以自己验证一下,用这个商乘以除数,然后再加上余数是否可以拼凑出被除数,好那我们来简单总结一下,手算二进制除法的一个规律,那首先由于这个定点数它的呃小数点都是固定的,所以当我们在进行两个正的定点小数的啊,一个除法运算的时候,其实可以忽略小数点,就像左边这个样子,那我们每一次会确定一位商,并且在二进制除法当中,每一位商只有可能为0或者为1那美味的伤到底娶林还是去一这个是通过心算的方式得到的我们会观察当前剩余的。并且在二进制除法当中,每一位商只有可能为0或者为1,那每一位的商到底取0还是取一还是取1,这个我们是通过心算的方式得到的,我们会观察当前剩余的还需要拼凑的这个部分和除数的大小到底谁更大,如果除数要更大,那么这一次我们就伤0,而如果此时剩余的这个余数要比除数更大,那这一次我们就会商议是用这样的方式来确定商,那当我们在确定了一位商之后就可以得到一个新的余数,并且基于我们上商的这个原则,我们新得到的这个余数最高位一定是0,所以我们可以把最高位的这个点给忽略掉,只关注这个余数后面的4类,然后接下来我们再在这个余数的末尾再添一个0,于是就可以再开始确定下一位的商是5倍,所以当我们确定了第5位的商之后,啊,最后得到一个余数,我们就不需要再往后继续了,好,接下来我们要思考尝试着用机器来实现同样。后啊,最后得到一个余数,我们就不需要再往后继续了,好,接下来我们要思考的问题是,如何把这种手算的思想尝试着用机器来实现,那同样的还是穿越回这张PPT,当我们在讲到运算器基本组成的时候,我们提到过如果此时进行的是除法运算,那么ACC这个寄存器会用于存储被除数,还有余数MQ会用于存储商,而X通用寄存器会用于存储除数好,接下来我们来看一下运算器如何实现源码的除法,接下来介绍这种方法叫恢复余数法,那之前我们探讨的手算除法是呃,计算两个正数的除法,那对于元码的除法来说,被除数和除数既有可能是正的,有可能是负的,那类似于元码的乘法啊,最终乘积的正负性我们会单独的用一个异或运算来确定,只需要把被除数和除数的符号位进行一个抑或就可以确定,最终的商应该是正是-我们会用而被除数和除数的。最终的商应该是正式付而商的实际数值,我们会用呃被除数和除数的这个绝对值进行除法计算,这样的话我们就可以转换成之前探讨的两个正数相除的这种形式好,现在我们先忽略符号类的处理,X除以Y,那我们先写出X和Y的绝对值的一个原码表示,然后需要写出除数的绝对值的补满,然后除数的绝对值再取负的一个不忘写出它相反数的不慢,呃,有什么用,这个大家一会会知道啊,那刚才我们说ACC里面会存储被除数,也就是X的值01011,然后通用寄存器里面会存储除数的一个值,也就是wai01101,然后MP寄存器里面会存储最终的伤,刚开始我们需要把它全部置为0那之后的这一位数的深灰色这一位骑士就是当前要确定的一位上这一位的作用大家一会到这个处罚。唉,其实就是当前要确定的一位商这一位的作用大家一会会体会到啊,现在先不管好,现在我们回头来看一下之前手动球这个除法的一个过程,之前在我们手算的时候,我们每一位的商到底取0还是取1,这个我们是通过当前剩余的这个部分,这个余数和除数的这种大小关系来确定的,我们用心算的方式来确定到底应该相邻还是商一,那对于运算器来说,其实就是要判断此时ACC里边保存的这个数和通用寄存器里面保存的这个除数到底谁更大,如果ACC里边保存的更大,那么就应该相应如果ACC里面保存的这个数更小,那么就应该相邻好,这是一个比较理想的处理方式,但事实上我们的计算机比较少,它并不会比较这两个数,谁更大谁更小,没有这样的功能那记算机确定的方式是将的他会先默笙箫默这一次上山上的是一位着我们需要把acc当中。角这两个数谁更大谁更小,没有这样的功能,那计算机确定它该上上一还是上30的啊,方式是这样的,它会先默认先默认这一次要上商一,那如果这一次上商上的施迤,是不是就意味着我们需要把ACC当中此时存储的这个术和通用寄存器当中存储的这个除数进行一个相减的操作,然后再把这个相减的结果放到ACC里边,因为每一次我们上商一其实就是把余数减掉除数对吧?那要实现余数减掉除数,是不是就相当于要让余数加上这个除数的呃,一个负值的补码,因为计算机里面并没有减法电路,所有的减法都是用补码的加法来等价的实现的,所以这就是为什么?我们之前要写出这个除数的赋值的一个补码的原因,好来看一下,此时我们要确定的是第1位商低位商,我们用手算的方式知道,本来是应该上林的,但是计算机不一样,他会默认此时应该上一啊,那基于之前的特征,如果这一次商要上一那么就需要有。知道,但是计算机不一样,它会默认此时应该上一啊,那基于之前的推论,如果这一次商要上一,那么就需要用ACC里面保留的这个倍数数,或者说也可以把它看作是当前的余数减掉呃除数的值,也就是要加上这个除数的负值的一个不骂,然后把这个减法操作的结果再放回ACC累加寄存器当中,那么这次余数减除数得到的结果是4个1一个0这个加法是通过AR又完成的,ACC里面的直送到a ru,然后通用寄存器里的值也送到AR you a are you里面的加法器啊,做完加法之后会把这些加的结果再次送回ACC,把ACC里面的内容给覆盖,所以经过这一步的操作,ACC里的值会更新为4个一一个0好,现在问题来了之前我们求余数的这一步减法操作得到的结果那是不是说明之前的这个语速是要比除数更小的所以之前上上一级是不应该的。于是怎么办呢?是要比除数更小的,所以之前上商上一其实是不应该的,于是当运算器检测到符号位为1的时候,他就知道之前上商一上错了,于是怎么办呢?知错就改,应该把商从一改为0,好那既然现在应该相邻而不是商1,所以我们之前用余数减掉除数所得到的这个值是不是错误的,本来不应该减掉除数,而应该是减掉全0,也就是什么都不减,所以我们必须把ACC里边的这个数值把它恢复原样恢复成原有的那个余数好,那之前我们是减了一个除数,我们要把它恢复原样,我们是不是再加上除数把它加回去就行了,所以基于之前相减的这个结果,在这个结果的基础上,运算器会再加上除数,然后把这两个数相加的结果再次的送回ACC把ACC的内容给覆盖,这样的话ACC里边就可以恢复成原本该有的那个余数也就是商林就是为什么。你就可以恢复成原本该有的那个余数,也就是商琳得到的这个余数好,所以这就是为什么这种方法叫恢复余数法的原因,计算机刚开始会默认伤医而伤医的时候,得到的余数有可能是错误的,如果发现上错了改成商林的话,需要把榆树恢复原样,然后才可以进行接下来的运算好,现在我们恢复了榆树之后,相当于已经完成了伤铃并且相减的一个工作,那这次相减得到的结果应该是01011这样的5倍的音速好,接下来当我们在确定下一位的商的时候,这一位的商乘以除数所得到的这个结果,是不是要和之前这个余数进行一个错位的相减,我们需要把手部的这个0给去掉,然后再抹未补上一个0,那用硬件怎么实现呢?很简单,只需要把AC和M里的内容全部统一的逻辑左移一位就行了,也就是把M的最高位左移移到ACC的没味,然后AC里面每一位都往前移原本的最高倍的。只需要把ACC和MQ里的内容全部统一的逻辑左移移位就行,乘以除数所得到的这个结果,是不是要和之前这个余数进行一个错位的相减,我们需要把手部的这个零给去掉,然后再抹未补上一个0,那用硬件怎么?乘以除数所得到的这个结果,是不是要和之前这个余数进行一个错位的相减,我们需要把手部的这个0给去掉,然后在末位补上一个0,那用硬件怎么实现呢?很简单,只需要把ACC和MQ里的内容全部统一的逻辑左移一位就行了,也就是把MQ的最高位左移移到ACC的末位,然后每一味都往前移,原本的这个最高倍的灵会被丢弃,那由于是逻辑左移,所以MP里面空出的这个低位我们会用灵来补上好,现在我们已经模拟出了手,算得到第2个余数的这样的一个步骤,接下来我们是不是就可以确定下一位的伤应该伤多少,那和之前一样计算机很少他会默认先伤医,那伤医就意味着此时的这个余数,这个余数应该要减掉除数逻辑和楚楚就相当于加上这个处的副职的一个不慢那么这一次相见操作这个结果ac里边。互吗?那么这一次相见操作得到的结果是这样的,我们把这个相减的结果更新到ACC里边,接下来运算器检查,此时ACC里面得到的这个余数它的值是正的,那这就意味着之前这个余数确实是要比除数更大的,所以此时这一步我们商一并没有什么错,那这种情况下,这我们得到的余数就是一个正确的余数,我们不需要再把它恢复原样,那接下来的处理和之前类似手算的时候,我们会在啊这个余数的末位补一个0,那用硬件实现的话,就是让ACC和MQ里的这些数倍全部的统一逻辑左移一位 ACC的高位这个零会被丢弃,然后末位会补上一个0,好,现在这个余数我们已经搞定了,接下来我们就可以确定下一步的商应该是多少,那同样的会首先默认商一 Ac的值剪掉除数的职业就是加上除数了一个结果是这样的还把这个结果更新过检查站这次得了余数同样是一个正数。等余数同样是一个质数,那就说明之前商一是没有错的,因此进入下一步,让ACC和MQ全部逻辑左移,然后MQ的低位补0,好,那现在我们已经确定了余数的值是多少,接下来就可以确定下一位的商应该商多少,同样的计算机很少,它会默认先商,一让ACC里的值直接减掉,除数也就是加上除数绝对值的负值的一个补码,那么得到的结果是11101,好,那这一次我们得到的这个余数是一个负值,那是不是说明之前这一步的余数要比除数更小,所以才导致了减法之后得到一个负值,好那余数比除数更小,所以之前这一步我们不应该伤医而应该伤伶,所以接下来运算器会把当前这一辈的伤从一改为0,并且还需要恢复余数那会瘦的办法就是当前the的这个值再加上除数零一零一零降了一个状态接下来应该进入下一步。再加上除数因此余数会被恢复到01010,这样的一个状态好,接下来应该进入下一步,让这个余数还有商统一的左移逻辑左移位低位补0,那么就得到了下一步我们需要处理的这个余数,此时我们需要确定最后一位的商是多少,当它的计算机会默认商一让ACC的值减掉除数的值,也就是加上这个除数的负值的一个补码,得到的结果是00111对应手,算就是我们最后这一步得到的这个余数的结果好,那由于我们这儿是假定及其字长只有5倍,因此我们只能求5倍的商好,那到这一步我们就求出了最终的一个商,那需要提醒大家的是最后这一步,我们上商议得到了一个正的余数,所以到这一步我们除法就结束了,但是如果说我们最后这一步上商一最后发现余数为一个负数需要恢复这个语速也需要在当前的基础上ac的值加上除数并且当前这个。还是需要恢复这个余数,也就是还需要在当前这一步的基础上,让ACC的值加上除数,并且当前这一位的商,我们需要把它从一改成0,这样才能结束,最后这一步的余数是正是负这会直接影响到我们的除法,应该在哪一步停止好,那由于我们这假定的是一个定点小数的一个除法运算,所以小数点隐含在这个符号位的后面,商的值是0.101和我们手算的结果一致,而最终得到的这个余数需要在0.0111的基础上再乘以2的负N次方,那N的值是4,所以真实的余数需要在这个基础上再乘以2的-4次方,而最后我们是不是还需要关注符号位应该是多少?那这个例子当中,由于X和Y都是正的0和0异或等于0,所以这个符号V为0,所以这个商保持正值不变可以暂停我们算厨房的一个过程需要注意的是计算机如果说。意的是计算机会默认上商一,而如果说发现余数得到了一个负值,我们就需要把商从1恢复成0,同时把余数恢复原样,好,那这给大家画出硬件细节是为了让大家理解的更深,那如果用手算的方式模拟恢复余数法啊,用这样的方式写出来就可以了,来看一下题目会说明机器字长是多少倍,然后给出被除数和除数的一个值,那我们需要给出被除数和除数的绝对值的一个源码表示,并且写出除数的绝对值和绝对值取负的一个无码的形式,好刚开始我们会尝试着用最初始的这个被除数减掉除数,也就是加上除数的绝对值的负值的一个补码,而用这样的方式得到一个余数,此时这个余数是一个负值符号位为1,所以我们可以确定当前这一位的商,我们应该商0并且在这个付的余数的基础上再加上除数来恢复原本该有的样子然后把这个语速逻辑做研究一位一定。这个余数逻辑左移逻辑左移就意味着第1位一定是补0,好,所以恢复了余数,并且逻辑左移之后,我们就可以开始确定下一位的商应该商多少,那同样的我们会先减掉这个除数,用这次减法操作得到的余数的正负性来确定当前这一位的商,我们应该取0还是取0,还是取1,如果余数为正,那就确定这一位商应该取1,如果余数为负,那么就确定这一位的商应该取0,好,那由于我们此时得到的余数为正,所以就不需要再回复余数,可以直接把当前这个余数给逻辑左移末位天0,这样我们又可以进入下一位的商的确定,当然了要减掉这个除数,然后根据这个余数的正负性来确定商到底取一还是取0,好那后续的就不再展开,大家可以暂停,然后自己在稿纸上手算模拟一遍啊,来进行一个小小的总结,对于源码的恢复余数法我们首先要用得到一个新的余数最开始的时候我们可以把这个被除数看作是榆树一不一定。得到一个新的余数,那在最开始的时候我们可以把这个被除数看作是余数,第1步一定是减掉这个除数,然后我们会根据这个新余数的正负性来判断,我们这一位的商应该商0还是商一,如果这个新余数为正数符号位为0,那么我们就可以确定这步我们应该商议,并且直接把之前得到的这个余数逻辑左移,接下来就可以进入下一轮的处理,而如果说之前得到的这个所谓的新余数它是一个负值符号,V为1,那么我们可以确定当前这一倍的商应该相邻,并且通过加上除数的绝对值的方法来恢复余数,那我们把这老余数给逻辑左移移位,就可以再进入下一轮的处理,那需要注意的是,如果数值为韦恩的话,那么逻辑,所以只需要进行N次,但世上伤我们需要上N加一次,最后这次得到的余数,我们是不需要进行逻辑左移的,所以左移的次数会比上伤的次数少一次源码的处罚回复的问题是这样的每一次我们。说之前得到的这个所谓的新榆树,他是一个赋值符号位为1,那么我们可以确定当前这一位的伤应该伤伶,并且通过加上除数的绝对值的方法来恢复余数,那我们把这个老榆树给逻辑左移一位,就可以在进入下一轮的处理,那需要注意的是如果数值被韦恩的话,那么逻辑,所以只需要进行N次,但世上伤我们需要上N加一次,最后这一次得到的余数,我们是不需要进行逻辑左移的,所以左移的次数会比上伤的次数少一次啊,那这就是源码的除法和恢复余数法,那现在的问题是这样的,每一次我们都先默认商一,当我们发现余数为负的时候再进行加除数恢复余数,这样的一个操作,那这种操作显然是比较麻烦的,所以接下来我们要思考的问题是能否不恢复余数,把这个中间的一些步骤给进行简化呢,好那我们来分析一下,恢复余数的这个过程来看这个例子啊,刚开始这一步剪掉除数,得到了一个副的榆树,那我们把这个余数记为AA是一个负值由于。我不恢复余数,把这个中间的一些步骤给进行简化了,好那我们来分析一下,恢复余数的这个过程来看这个例子啊,刚开始这一步剪掉除数,得到了一个副的余数,那我们把这个余数记为AA是一个负值好,接下来由于a是负的,所以我们需要让a加上我们的恶徒数的绝对值,那我们把除数的值记为B,所以再往下0.1011这一步,其实是a+B的一个结果,好接下来我们会把a+B逻辑左移一位,那这个逻辑左移是不是相当于×2对吧?那我们把它展开就是2a+2B这样的一个结果,好,现在基于2a+2B这样的一个结果,我们会再减掉除数也就是减掉B来得到下一步的余数,那2a+2B再减掉一个B,不就是2a加B吗?好,所以之前这一步我们得到了一个负的余数,然后把这个负的余数一步一步恢复左移,然后再减掉除数,得到了确定下一位商所需要的这个余数这中间的过程我们中间做。恢复左移,然后再减掉除数,得到了确定下一位商所需要的这个余数,这中间的过程,我们中间做的这一系列操作,其实可以把它合并为2a加B,也就是余数乘以2,再加上除数这样的一个综合的效果,那之前这个余数乘以2不就相当于把榆树所以一味吗?在左移移位之后,再加上除数的绝对值就可以直接得到下一步的余数,这样的话我们恢复余数的这个步骤就可以直接被跳过,可以让流程简化,效率更高好,所以这就是我们优化恢复余数法的一个策略,如果我们发现余数得到了一个负值,那么我们可以直接确定这一位的商应该是商林,然后接下来我们不需要播出余数,而是让余数左移一位,然后再加上除数的值就可以直接跳到下一步好,那基于这种优化思路的源码除法,我们可以把它称为加减交替法,又可以称为不恢复余数法刚开始被除数是占了一个只放在acd开始全部为零。只存放在ACC里面,MQ刚开始全部为0,那第1步我们一定是减掉这个除数啊,减掉除数之后得到的余数是一个负值,那我们可以确定此时的商应该商0,那基于之前的推论,我们不需要回复余数,我们可以直接让这个余数逻辑左移逻辑左移左移之后再加上一个除数就可以直接得到下一步的余数,那由于下一步的这余数它是正的,所以我们可以确定这一位的商,我们应该商一好,那由于此时这个余数是正的,那接下来的处理方式和恢复余数法是一样的,剩的余数我们直接让它逻辑左移,然后用左移得到的这个余数减掉除数,用这样的方式再确定下一步的榆树,那在下一步的榆树同样是一个正的,所以我们可以确定这一位的商应该是1号,总之我们会根据每一步得到的余数是正还是负来确定上应该是零还是一张的值之外我们还会根据余数的政府确定下一步。应该是0还是1,那除了确定商的值之外,我们还会根据余数的正负性来确定,下一步我们应该左移加除数还是左移减除数好,那这就是原码的加减交替法加减交替法就是。阿当余数为负的时候,中间的这些步骤把它统一为一部更简单的操作,是对恢复余数法的一个优化,那原码的加减交替法鄂博号位的确定也是一样的,需要单独的来确定,用被除数和除数的符号为进行一个抑或来确定上的正负性,另外一点需要强调的是正负性和商是相同的,如果商为负,那么这个也应该是负的质量,那最后还是要注意,如果我们最后这一步得到的余数是一个负值,我们同样也需要把这个余数恢复。需要把这个余数恢复原样,也就是加上除数的绝对值,用这样的方式来得到正确的余数,而所以虽然加减交替法又称为不恢复余数法,但是在最后这一步,如果发现余数为负的时候,最后这一步同样也需要恢复余数,当然这只是有可能出现的情况,像刚才我们给的这个例子当中,最后这一步就不需要核出余数,好,最后同样对加减交替法进行一个小小的总结。啊,进行一个小小的总结啊,刚开始第1步一定是用被除数减掉除数的绝对值,得到一个新的余数,然后接下来根据这个新的余。除数的绝对值得到一个新的余数,然后接下来根据这个新的余数为正还是为负来确定当前这一位的商应该商0还是商1,如果余数为负,那么就是商0并且让余数逻辑左移,然后再加上除数用这样的方式得到下一步的新余数,而如果余数为正,那么我们可以确定商一,然后让当前这一步得到的余数左移并且减掉除数,用这样的方式得到下一步的新余数,整个过程我们加法和减法的,呃,执行次数总共会有N加一次,每进行一次加减就会更新一次余数,而每更新一次余数就可以根据余数的正负性来确定一位商到底是0还是0还是1,那需要注意的是当我们在确定了最后一位商之后我们就不需要再进行逻辑作揖了所以操作的次数要比加减运算的字数要少一个另外一点如果最后这一步得到榆树市一个副职三零并且在多进行the加上。后这一步得到余数是一个负值,那么我们需要商零并且再多进行一次,加上除数的一个加法运算,用这样的方式来得到正确的余数,所以理论上来说,加减交替法当中,加法和减法的总次数有可能是N加一次,也有可能是N加二次,但逻辑左移只需要进行分次,好,那这是原码的加减交替法,大家可以再暂停吸收一下,好那最后还需要跟大家聊一个问题,在这个地方我们探讨的是定点小数的一个除法运算,那由于是定点小数,所以我们最终得到的商肯定也只能是一个定点小数,而不能是一个整数。因此在定点数的除法运算当中,我们会规定被除数一定要小于除数,因为如果被除数大于除数的话,那最终伤的结果肯定就要大于1,而定点小数无法表示大于1这样的一个范围,那硬件就是怎么检查被除数和除数的大小关系的呢?其实就是通过第1步的商来确定的,正常情况下,我们第1步减除数所得到的这个余数一定要是一个赋值。通过第1步的伤来确定的,正常情况下,我们第1步减除术所得到的这个余数一定要是一个负值,如果第1步得到的就是一个正值,也就是要伤医的话,那么就说明我们的被除数要比除数更大,那此时硬件电路就会检测出这个问题,并且直接停止这些除法的运算,这种除法是没办法用定点小数来表示的好的,那么大家可以再消化一下,这恢复余数法和不恢复余数法它们的一个啊区别和联系,那以上就这一小节的全部内容,好的尚小姐。