Ton*_*ark 9 floating-point types ieee-754
假设我有这个:
float i = 1.5
Run Code Online (Sandbox Code Playgroud)
在二进制文件中,此float表示为:
0 01111111 10000000000000000000000
我打破了二进制代表'signed','exponent'和'fraction'块.
我不明白的是这代表1.5.
一旦减去偏差(127-127),指数为0,隐式前导部分的分数部分为1.1.
1.1如何缩小= 1.5 ???
pax*_*blo 25
首先考虑十进制(基数为10):643.72是:
或600 + 40 + 3 + 7/10 + 2/100.
这是因为n 0总是1,n -1与1/n相同(对于特定情况),n -m与1/n m相同(对于更一般的情况).
同样,二进制数1.1是:
2 0为1,2 -1为1.
在十进制,数字在小数点的左边有乘法器1,10,100等从小数点左边的标题,和1/10,1/100 1/1000标题右(即,10 2,10 1,10 0,小数点,10 -1,10 -2,...).
在base-2中,二进制点左边的数字有乘数1,2,4,8,16,左边是左边的数字.右边的数字有乘数1/2,1/4,1/8,依此类推.
那么,例如,二进制数:
101.00101
| | | |
| | | +- 1/32
| | +--- 1/8
| +------- 1
+--------- 4
Run Code Online (Sandbox Code Playgroud)
相当于:
4 + 1 + 1/8 + 1/32
Run Code Online (Sandbox Code Playgroud)
要么:
5
5 --
32
Run Code Online (Sandbox Code Playgroud)