计组第六章——计算机的运算方法重点总结
目录:
1.原码、反码、补码、移码
2.浮点与定点表示
3.加减法运算
4.原码乘法
5.补码乘法
6.除法运算
7.浮点数运算
8.算术逻辑运算单元
1.原码、反码、补码、移码
1.1机器字长
1.计算机的数存放在寄存器中,通常称寄存器的位数为机器字长
1.2零的表示形式
原码中0有两种表示形式:
[+0]:0000 0000
[-0]:1000 0000
反码中0有两种表现形式:
[+0]:0000 0000
[-0]:1000 0000
补码中0有一种表现形式:
[+0]=[-0]:0000 0000
移码中0有一种表现形式:
[+0]=[-0]:1000 0000
1.3位数-1.0与-128有补码(八位)
一个负数的补码=模 - 该负数的绝对值对应的二进制(请自觉摒弃符号位这一概念,就是二进制)
八位机-1.0和-128是没有原码
1.4码制之间的转换
1.补码=原码按位取反+1
2.原码=补码按位取反+1
3.[-y]补==[y]补连同符号位按位取反+1
4.移码==补码符号位取反
2.浮点与定点表示
2.1规格化数
规格化数:计算机规定浮点数的尾数用纯小数表示,即整数部分为0,将尾数最高位为1的浮点数称为规格化数
2.2IEE754标准
IEE754标准里边的小数点的位置包含两个小数点,第一个小数点表示的是阶符小数点的位置,第二个表示尾数小数点的位置。由于规格化数的最高位是都是1所以我们可以把最高位隐含掉,用的时候再填上,这样可以增加尾数的表示范围
我们计算IEE754标准的浮点数时,隐含的1其实是1.0*阶码
2.3浮点数为非规格化数时表示范围
2.4机器零
3.加减法运算
3.1逻辑与算术移位
当补码符号位取三位的时候,最高位符号位不动,剩余两位符号位参与移位
3.2溢出判断
一位符号位判断溢出,当两者是正数,符号位一定不会进位,如果最高有效位进位,那么就发生溢出,当两者都是负数,由于负数是用补码进行计算,符号位一定会进位,负数补码最高有效位和原码正好相反,所以当负数的最高有效位进位,由于与原码相反,那么原码就一定不会进位,所以就不会发生溢出,否则就会发生溢出
4.原码乘法
4.1原码一位乘
原码一位乘的过程中,X寄存器存放被乘数的原码,Q存放乘数的原码,C存放逐位相乘的次数(乘数尾数的尾数n),还有一个地方特别注意Q寄存器里存放的乘数只有一位符号位(其实按照我们正常的原码一位乘的操作,Q寄存器不需要放置符号位,也就是说Q其实只需要n-1位,但是计算机并不是多少位的寄存器都有,寄存器的位数都是已经设计好的,所以使用n位)
对书中原话:部分积取n+1位以便存放乘法过程中绝对值大于或者等于1的值的理解:
对于原码一位乘来说部分积取n+1位,这里部分积取取n+1位即ACC寄存器是n+1位,最高位存的不是符号位,而是低位数值部分相加以后向高位的进位,虽然小数乘以小数不会大于1,也就是不会向整数部分产生进位,但是部分积在没有移位之前最高位可以大于0,就比如下图的部分积第四次没移位之前,最高位是1
总结:原码一位乘符号位与数值分开处理,操作数使用原码绝对值,原部分积使用的单符号位、逻辑右移,使用n+1位寄存器
4.2原码两位乘
当乘数的两位检测到11的时候,我们只需要做减去被乘数,然后再加上四倍的被乘数,在11位置加四倍的被乘数,可以交给11前面两位的乘数来做,因为11+1=100,也就是让11前面两位被乘数+1,再进行相应的操作,这个过程是触发器置1来实现,如果检测两位数的时候触发器为1,那么机器就会把这两位数加1然后再进行相应的操作
关于三位符号位书中原话:
对于原码两位乘来说,部分积取三位符号位,因为乘法过程中可能要加上2倍被乘数,使得部分积的绝对值大于2,为此只有对部分积取三位符号位才能保证运算准确无误
关于原码两位乘中乘数符号位问题:
乘数y用双符号还是单符号表示得根据乘数y的数值的奇偶性判断,而且最后一步移位与否也与乘数y的数值的奇偶性有关:
· 如果乘数y的尾数n的位数为偶数,则乘数y用双符号表示,最后一步不移位
· 如果乘数y的尾数n的位数为奇数,则乘数y用单符号表示,最后一步要移一位
总结:原码两位乘符号位单独处理,部分积使用三位符号位,操作数为绝对值的补码,算术右移,乘数分为一位和两位符号位,寄存器取n+3位
4.3原码一位两位乘比较
5.补码乘法
5.1补码一位乘
当乘数大于0时:[x补]*[y补]=[X*Y]补
当乘数小于0时:[x补]*[y补]=[X*Y(绝对值)]补-[x补]
书中原话:
X存放被乘数的补码,含两位符号位,Q存放乘数的补码,一位符号位,末位附加位(yn+1)。考虑到部分积可能会出现绝对值大于1的情况,故部分积和被乘数取双符号位
总结:补码一位乘符号位自然形成,部分积使用两位符号位,乘数为一位符号位一位附加位,算术右移,寄存器取n+2位,操作数为补码
5.2.补码两位乘
补码两位乘中,部分积和被乘数取三位符号位,乘数取两位符号位(此时的Q取n+3位,还有一位是附加位)。乘数取两位符号位是因为乘数每次右移两位,且用三位判断,故采用双符号位更便于硬件的实现(便于硬件的实现)。
对于书258这一段话的理解:
符号位(共3位) ,乘数也多取1位符号位(共2位),这是由于乘数每次右移2位,且用3位判断,故采用双符号位更便于硬件实现。可见,当乘数数值位为偶数时,乘数取2位符号位,共需作n/2次移位,最多作n/2 +1次加法,最后一步不移位;当n为奇数时,可补0变为偶数位,以简化逻辑操作。也可对乘数取1位符号位,此时共进行n/2 +1次加法运算和n/2 +1次移位(最后一步移一位)。
对于双符号位,乘数位数为偶数的时候,假设尾数为两位,加上一位附加位,再加上两位符号位一共五位,一共需要移动2/2=1次,做2次加法(最后一次加法之后不需要移位,因为此时只是y0和yy1之间的操作)(注意:补码两位乘每次右移两位,也就是说乘数一次往前移动两位)。当n为奇数时,取一位符号位,再加一位附加位。比如尾数1位(移动一位做一次加法),那么总共就三位,注意:这时第一位符号位,第二位尾数,第三位附加,二三用移动一位,一二不用移位,故最后一步移动一位,
总结:补码两位乘符号位自然形成,部分积采用三位符号位,乘数为两位符号位加一位附加位,算术移位,寄存器取n+3位,操作数是补码
6.除法运算
6.1原码除法
对于余数部分也可以取双符号位,此时移位操作按照算术左移处理,最高位是真正的符号位,此高位符号位在移位过程中可被第一数值位占用
总结:原码除法符号位单独处理,余数和商值均采取一位符号位,逻辑左移,寄存器采用n+1位,操作数是补码
6.2补码除法
总结:补码除法符号位自然形成,余数和商值均采取一位符号位,逻辑左移,寄存器采用n+1位,操作数是补码
7.浮点数运算
7.1浮点数加减运
·
这里的最大负数,由于2-1不是规格化数,而我们又要保证位数是规格化数,又要保证尾数最小,所以我们就要把尾数写成2-1+2-n
7.2浮点数乘除法
8.算术逻辑运算单元
8.1并行加法器
这里的Ci之所以可以化简成AiBi+(Ai+Bi)Ci-1是因为这里的+实际上就等同于异或操作
也就是说,当AiBi同时为1那么就会进1,或者有一个为1就会有Ci=Ci-1
我们可以发现全加器的进位输出是高一位全加器的进位输入,当全加器有进位的时候,这种一级一级的传送进位的方式就会大大影响运算速度,这样就引进了快速进位链
8.2.串行进位链
对于下图:
其实就就是
表达式d0+t0C-1等同于:
1.d0取反
2.t0&C-1取反
3.(1的结果)&(2的结果)再取反
其实在计算机的二进制世界里,&(与)其实就等同于乘。^(异或)等同与+
8.3.并行进位链
也就是说,要得到进位,就要经过与门,或门,非门,非门。经过两次或门有助于稳定和增强信号。与或非门在同一个设备中,上述说明与或非的延迟时间为1.5t,加上一个非门延迟时间是1t,所以总共用时2.5t。
之所以有两个与门是因为上图的一个与或非门设备只能同时做四组与运算,所以另一个是附加的为了正确得到最终结果
8.4.单重分组跳跃进位
8.5.双重分组跳跃进位
当n=32时使用串行进位链需要64ty,使用单行分组跳跃进位链需要20ty
与50位技术专家面对面20年技术见证,附赠技术全景图总结
以上是生活随笔为你收集整理的计组第六章——计算机的运算方法重点总结的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: C语言各种变量的初始化
- 下一篇: 计算机乘除法运算中部分积和余数的符号位选