首页 > 编程知识 正文

负数的补码规格化,采用补码表示负数有什么好处

时间:2023-05-06 12:30:43 阅读:191439 作者:4280

以小数为例

原码形式下 想象出一个数轴 ------------------------0------------------> 将0用原码表示,设机器字长为5,一位符号位,放在数轴上 ----------------1.0000------0.0000----------> 不难想象从+0向正半轴的表示范围是0.0000 ~ 0.1111即0~1-2-4 从-0往负半轴也要有这么大的表示范围,即-(1-2-4)~ 0 故原码小数的表示范围为-(1-2-4)~ 1-2-4,但此时注意负0和正0之间有“一个单位的空间”,此单位长度为0.0001,即2-4(机器无法表示所有连续的小数,故其储存的仍旧是离散的,根据位数的不同,其精确度不一样) 补码形式下 +0和-0合二为一,那整个数轴就多出一个单位,那这个单位用来干什么呢?这个多出来的单位长度为负半轴扩展了表示范围 1.0000--.....---1.0001---0.0000---0.0001----> 原本用来表示-0的1.0000被拿到负半轴最左端,它表示什么数呢?|-(1-2-4)|+|-2-4|=1 ,1.0000用来表示-1,负半轴可以延伸到整整1的位置,故补码形式下表示范围是 -1 ~ 1-2-4
由此不难得到其他形式的取值范围 定点机小数定点机整数定点机原码1.1111~0.11111,1111~0,1111补码1.0000~0.11111,0000~0,1111反码1.1111~0.11111,1111~0,1111

补码规格化下的负数取值范围

规格化:规格化又叫做规格化数是一种表示浮点数的规格化的表示方法,还可以通过修改阶码并同时移动尾数的方法使其满足这种规范。

什么意思呢?
就是通过移动尾数,修改阶码,把尾数移动,要想保证真值不变,必定增减阶码,那么把尾数弄成什么样子呢?
解释如下:

对于规格化浮点数小数点后第一个值是固定的(正数:1,负数:原码1,补码0),所以该位往往缺省,称为隐藏位。
规格化要求尾数:
1/R<=|M|<1
R=2时: 1/2<=|M|<1 即1/2<=|M|<1
将一个浮点数转换为规格化的过程,称为浮点数规格化。

就是说正数要变成0.1XXXXX,负数原码要变成1.1XXXXX,补码就是1.0XXXXXX
问题又来了?
补码规格化后负数的取值范围是怎么样,为什么非得1.0XXXXX的形式?不能1.1XXXXX? 后文解答

现在从最大负数开始找起

这是我弄不懂的地方,偶然间看到了前辈的推理,让我好好思考了一番,以下内容多为转述,这里附上前辈的博客

前辈的博客就在这里啦

如果不考虑规格化,最大负数必定为-0.0001,原码1.0001,补码1.1111,显然不符合1.0XXXX的形式根据1/2<=|M|<1,不难理解正数要为0.1XXXX的格式,小数点后一位为1,转化为十进制的1/2.现在来探索规格化负数补码的范围 继续往后取,最大负数取-0.0010,原码1.0010,补码1.1110,仍旧不符合1.0XXXXX形式取-0.0011,原码1.0011,补码1.1101,不符合 思考:如果使补码形式为1.0XXXX,那么原码形式为如果为1.0XXXX取反+1后仍为1.0XXX的只有1.0000,显然为0不为负数,所以原码应该为1.1XXXX形式 取-0.1000,原码1.1000,补码1.1000,这时刚好为-1/2,符合尾数规格化的范围,但补码形式不符合取-0.1001,原码1.1001,补码1.0111,符合,这是负数补码规格化的最大值,形式为1.01111…11111 思考:规格化的目的说明如下

为了提高精度需要使尾数的有效位数尽可能占满可用的位数。这种措施称为浮点数的规格化。

为什么尾数范围规定在1/2<=|M|<1的范围就可以使有效位数尽可能的占满可用的位数呢?这种移动尾数,增减阶码的操作是为了满足上述目的? 再思考:小数点不动,将尾数左移,每左移一位,阶码减一,保持真值不变,左移到什么程度,就不能再移动? 不能再移动表示->如果再移动就要损失有效数字,故遇到1时规格化停止,原码形式为0.1XXXX,所以1/2<=|尾数|.

结论:负数补码规格化最大负数形式为1.0111…111,原码为1.1000…001,最小负数自然是1.0000000…00(-1)
故范围为:-1~ -(1/2+2-n)

最后一问:当取-0.1000时,原码1.1000,补码1.1000,这时刚好为-1/2,符合尾数规格化的范围,为什么不从这里开始取值呢?
答:为了机器判断方便,往往不把-1/2列入规格化的数,因此,机器只要判断运算结果的尾数最高位(数符)与尾数次高位(第一有效位)是否相同,便可以判断是否是规格化的数。

有不对的地方还请大家指正吖

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