一. 将一个float型转化为内存存储格式的步骤为:
1、先将这个实数的绝对值化为二进制格式
2、将这个二进制格式实数的小数点左移或右移n位,直到小数点移动到第一个有效数字的右边。
3、从小数点右边第一位开始数出二十三位数字放入第22到第0位。
4、如果实数是正的,则在第31位放入“0”,否则放入“1”。
5、如果n 是左移得到的,说明指数是正的,第30位放入“1”。如果n是右移得到的或n=0,则第30位放入“0”。
6、如果n是左移得到的,则将n减去1后化为二进制,并在左边加“0”补足七位,放入第29到第23位。
如果n是右移得到的或n=0,则将n化为二进制后在左边加“0”补足七位,再各位求反,再放入第29到第23位。
或者使用127 +/- 指数位,左移就+3,右移就-3。因为128就是首位为10000000,127就是01111111所以与上述方法同理。
二. 以8.25为例:
1 ---> 1000.01
2 ---> 1.00001
3 ---> 小数点后的数放入尾数位置
0 | 00000000 | 00001000000000000000000 |
4 ---> 正数第一位置1
1 | 00000000 | 00001000000000000000000 |
5 ---> 因为是左移的,指数位置第一位置1。
1 | 10000000 | 00001000000000000000000 |
6 ---> 因为是左移的,指数减一后化为二进制。
1 | 10000010 | 00001000000000000000000 |
三. 将-8.25转成浮点数:因为正负只用01来标记,其余只按绝对值来操作,所以只将31位变为1即可。或者使用127 + 3亦可。
1 | 10000010 | 00001000000000000000000 |
四. 将0.25转换为浮点数
1 ---> 0.01
2 ---> 1.00 二的负二次方
3 ---> 小数点后的数放入尾数位置
0 | 00000000 | 00000000000000000000000 |
4 ---> 正数第一位置1
1 | 00000000 | 00000000000000000000000 |
5 ---> 因为是左移的,指数位置第一位置0。
1 | 00000000 | 00000000000000000000000 |
6 ---> 因为是左移的,指数减一后化为二进制。-2 - 1 = -3 或 127 - 2
1 | 01111101 | 00000000000000000000000 |
注意:因为几乎任何数(0除外)按照此算法表示都是1.xxx,所以1可以可以不用计入浮点数。