十进制转二进制的整数部分容易理解,但小数部分如何转换呢?
这里复习下进位计数制表示法:
比如 (11.5) 10 = (1011.1)2
(11.5) 10 = 1* 101 + 1* 100 + 5* 10-1
(1011.1)2 = 1* 23 + 0* 22 + 1* 21 + 1* 20+1* 2-1
所以对于任意十进制数的小数部分F转换为二进制都可以写为:
F = a1* 2-1 + a2* 2-2 + a3* 2-3 +... an*2-n
(基数为2,所以a1 到 an要么为0 要么为1)
比如 0.8 = a1* 2-1 + a2* 2-2 + a3* 2-3 +... an*2-n ,可以理解为0.8 包含了a1个2-1以及a2个2-2 ...。 求a1 a2... an
因为 0.8 / 2-1 = 1.6 所以a1 可取1.6 。 又由于基数为2, a1 到 an要么为0 要么为1。 所以a1 只能取1。
得出
F - a1* 2-1 = a2* 2-2 + a3* 2-3 +... an2-n
F - a1 2-1 = F - 1 * 2-1 = 0.6 * 2-1
0.6 * 2-1 = a2* 2-2 + a3* 2-3 +... an*2-n
因为 0.6 * 2-1/ 2-2 = 1.2 ,按照上面的方式得出a2 = 1
以此类推 得出a3 = 0,a4 = 0 ,a5 = 1,a6 = 1,a7 = 0,a8 = 0,a9 = 1...
0.8 = 1* 2-1 + 1* 2-2 + 0* 2-3 + 0* 2-4+ 1* 2-5...
由a1 a2... an表示成二进制 0.1100110011001100...无限循环下去。
计算机中小数又称为浮点数,分为尾数和指数部分,上面所求的就是尾数部分,由于计算机给尾数和指数所分配的位数有限,所以无法精确表示。