规格化,什么是规格化浮点数,怎么表示?

问题2和1很类似,就不重复了,我们来看一下问题1和问题3。

规格化,什么是规格化浮点数,怎么表示?

(1) 56(10)

规格化,什么是规格化浮点数,怎么表示?

1) 符号位

首先这是一个正数,所以符号位是0

2) 尾数和阶码的推导

56的二进制是:111000。用小数表示相当于是111000.0000000…

现在我们移动小数点,使得小数点前只有1位。对于这个数当然是向左移动:

移动1位是:11100.000000…

移动2位是:1110.000000…

类推

移动5位是:1.11000000…

好了,现在我们知道阶码应该是5,尾数应该是1100000…

你可能会问,怎么少了一个1?因为有数字前面的0是没有意义的,所以最高位一定是1(比如00000111,相当于111,所以第一个1前面的0都可以省略)。我们移动小数点的时候保证小数点前面的是那个最高位的1。所以没有必要表示出来。

3) 阶码

现在我们知道阶码是5,但是是采用移码的。所谓移码就是加上01111(最高位是0,其它位是1)。所以最后的阶码是:10100

4) 尾数

补够你要求的10位就行了。因此是1100000000

5) 完整的数

把上面的符号位、阶码和尾数表达出来就可以了,是:

0 10100 1100000000 16进制就是0x5300

(3) -0.00381(10)

1) 符号位

负数,所以是1

2) 尾数的推导

由于整数部分不存在,所以单独推导小数就可以了。采用乘2法,每次乘2取整数,然后继续把小数乘2。

比如你的0.00381乘2是0.00762,整数是0

再乘2是0.01524,整数是0

再乘2是0.03048,整数是0

再乘2是0.06096,整数是0

再乘2是0.12192,整数是0

再乘2是0.24384,整数是0

再乘2是0.48768,整数是0

再乘2是0.97536,整数是0

再乘2是1.95072,整数是1(终于是1了),以后乘的是小数部分

小数部分乘2是1.90144,整数是1

小数部分乘2是1.80288,整数是1

小数部分乘2是1.60576,整数是1

小数部分乘2是1.21152,整数是1

小数部分乘2是0.42304,整数是0

小数部分乘2是0.84608,整数是0

小数部分乘2是1.69216,整数是1

小数部分乘2是1.38432,整数是1

小数部分乘2是0.76864,整数是0

小数部分乘2是1.53728,整数是1

终于算满了10个有效位(心算的,有可能算错,但是大概意思是这样的)。

现在我们知道这个数是0.0000000011111001101…

现在我们向右移动小数点,直到整数位是1,

移动1位是:0.000000011111001101…

类推

移动9位是:1.1111001101…

好了,我们知道阶码是-9,尾数是1111001101(同上面的说明,最高的1忽略了)

3) 阶码

阶码是-9,加上01111是00110

4) 尾数

尾数是1111001101

5) 完整的数

合并上面的结果,是:

1 00110 1111001101 16进制是0x9BCD

另,有的浮规范中不省略尾数中最高的1,他们相当于从0.1xxxxx…开始计算的。那么阶码和尾数会右略微变化。

写得好累,希望对你有帮助。

这是我十年前的一个回答,谢谢大家有很多的赞。也有回复说回答错误。所以在最后补一句。浮点规范很多,需要根据具体结果。原题是要求用补码,而补码是用偏移2^n计算的,不过IEEE754规范中使用的是2^n-1作为偏移计算,例子中用的是类似IEEE754规范的值。如果用2^n计算需要对应调整。

再次说明:浮点规范很多,根据情况使用就好。这个回答只是说明概念。

版权声明:本站部分文章来源互联网,主要目的在于分享信息,版权归原作者所有,本站不拥有所有权,不承担相关法律责任,如有侵权请联系我们,本站将立刻删除。
(0)
上一篇 2022年5月25日 下午11:49
下一篇 2022年5月25日 下午11:50

相关推荐