以小数为例
原码形式下
- 想象出一个数轴
------------------------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.1111 | 1,1111~0,1111 |
补码 | 1.0000~0.1111 | 1,0000~0,1111 |
反码 | 1.1111~0.1111 | 1,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列入规格化的数,因此,机器只要判断运算结果的尾数最高位(数符)与尾数次高位(第一有效位)是否相同,便可以判断是否是规格化的数。
有不对的地方还请大家指正吖
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/34709.html