首页 > 编程知识 正文

移码计算例题,移码的运算

时间:2023-05-05 15:49:52 阅读:220534 作者:1450

转载文章
原文:https://blog.csdn.net/u011240016/article/details/53010061

移码的再总结
@(组成原理)

在总结原码,反码,补码的表示范围时,忽略了对移码的总结,现在看移码本身的表示范围与IEEE754使用的特殊阶码,有点迷惑,思考后才明白,这其中的关节。

首先我们明白移码与补码有相同的表达能力。也就是说,给定相同的机器字长,它们的表达范围相同。

比如,8位机器字长,都用1位表达正负。
则补码的表示范围:

[−27,+27−1]=[−128,+127][−27,+27−1]=[−128,+127]
移码的表示范围:

[−27,+27−1]=[−128,+127][−27,+27−1]=[−128,+127]
二者相同。

如果换一种说法,n位阶码,等同于n位机器字长。也需要用一位表示正负。

移码只用于表示整数。

定义:在真值上加上一个常数,这个常数叫偏置值。通常取2n2n,这个n是数据位,即机器字长去掉一个符号位。

表达范围[−2n,+2n−1],机器字长n+1位[−2n,+2n−1],机器字长n+1位
值得关注的特点是:

0的表示唯一。[+0]移=2n+0=[−0]移=2n−0=1,000…000(n个0,机器字长n+1)[+0]移=2n+0=[−0]移=2n−0=1,000…000(n个0,机器字长n+1)
一个真值的移码和补码仅仅相差一个符号位。无论正负。
移码全0时,对应的真值最小值−2n−2n。移码全1时,对应真值的最大值2n−12n−1。
移码保持了数据原有的大小顺序,移码大真值就大,移码小,真值就小。
特别思考最后一条。对于正数,因为符号位都是0,现在2n(第n+1位是符号位,恰恰是2n)2n(第n+1位是符号位,恰恰是2n)加过来,则最高位变1,于是移码大,真值就大。

对于负数,我们以3位数据位1位符号位来看。

表达范围是:[-8,7].

补码–移码:
−8=1,000补→+23=0,000移−7=1,001补→+23=0,001移−6=1,010补→+23=0,010移−5=1,011补→+23=0,011移−4=1,100补→+23=0,100移−3=1,101补→+23=0,101移−2=1,110补→+23=0,110移−1=1,111补→+23=0,111移
−8=1,000补→+23=0,000移−7=1,001补→+23=0,001移−6=1,010补→+23=0,010移−5=1,011补→+23=0,011移−4=1,100补→+23=0,100移−3=1,101补→+23=0,101移−2=1,110补→+23=0,110移−1=1,111补→+23=0,111移
可见通过移码的表示法,能够更清晰的去把握补码的负数表示形式。

移码是非常自然的,从全0开始到全1,主观上与我们的直觉一致,但是表示范围与补码相同。

主要看IEEE754编码下,有8位移码.
若是单纯的用原本移码的定义,表示范围是[−27,27−1]=[−128,127][−27,27−1]=[−128,127].
但是实际上是[−126,127][−126,127]。

为了空两个状态表达非规格化数和无穷大,去掉了00000000(8个0),11111111(8个1).

注意,这里的状态是移码状态。所以移码最大的状态表达式是11111110B=25411111110B=254,最小是00000001=100000001=1.

普通情况是真值加上偏置值求得移码表示,现在是已知移码表示求真值。偏置值取啥合适?若按正常取27=12827=128,那么最大真值就变成254−128=126254−128=126,最贤惠的香烟值变成1−128=−1271−128=−127。也就是左右各收缩一个真值。我们想想看,是为了多表达更多的大正数重要,还是表达一个极小的小数重要?更大的正数对吧!所以,偏置值往左挪一位,不能挪2位更不能3位,只用挪一个就可以表达移码本身能表示的最大正数127了。

所以,偏置值取的是127.

所以IEEE754单精度可以取得的阶码范围是[−126,127][−126,127],也即负数收缩了两个,正数不变。

同理,对于双精度的IEEE754编码,也是同样的分析,阶码的真值范围是[-1022,1023]。

再联想到IEEE754编码的尾数隐藏了一个数据位,所以尾数至少是1,且用原码表示,所以就很容易知道所有IEEE754相关的数值范围问题了。
IEEE754:

单精度:1, 8, 23(隐藏一位,实际精度是24位)
双精度:1,11,52(隐藏一位,实际精度是53位)
比如,最小正值分别是:1.0×2−126,1.0×2−10221.0×2−126,1.0×2−1022
最大正值分别是:(2−2−23)×2127,(2−2−52)×21023(2−2−23)×2127,(2−2−52)×21023
普通的移码阶码就按照正常的分析即可,即偏置值取2n,n是数据位数目。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。