计算机中二进制有小数吗,计算机中的二进制小数

前言

理解浮点数的第一步是考虑含有小数值的二进制数字

十进制小数

首先看一下十进制的小数的表示,举例

十进制数:12.34

12.34 === 1 * 101 + 2 * 100 + 3 * 10-1 + 4 * 10-2 === 12

math?formula=%5Cfrac%7B34%7D%7B100%7D

二进制小数

类比十进制小数表示形式

二进制数:101.11

101.11 === 1 * 22 + 0 * 21 + 1 * 20 + 1 * 2-1 + 1 * 2-2 === 4 + 0 + 1 +

math?formula=%5Cfrac%7B1%7D%7B2%7D+

math?formula=%5Cfrac%7B1%7D%7B4%7D=== 5

math?formula=%5Cfrac%7B3%7D%7B4%7D

十进制小数转二进制小数

举例:12.12510

将小数点前面的十进制数转二进制,一直除2得到1100

小数点后面的数采用乘2取整,顺序排列法

具体得做法是:

用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积为1,或者达到所要求的精度为止

0.125

2

-----

0.250 ----> 取整数得到 0

2

-----

0.500 ----> 取整数得到 0

2

-----

1.000 ----> 取整数得到 1

最终得到1100.0012

举例12.62510

0.625 * 2 ---> 1.250 取出整数部分得到 1

0.250 * 2 ---> 0.500 取出整数部分得到 0

0.500 * 2 ---> 1.000 取出整数部分得到 1

最终二进制小数为:1100.1012

举例12.710

0.7 * 2 ---> 1.4 取出整数部分 1 剩余0.4

0.4 * 2 ---> 0.8 取出整数部分 0 剩余0.8

0.8 * 2 ---> 1.6 取出整数部分 1 剩余0.6

0.6 * 2 ---> 1.2 取出整数部分 1 剩余0.2

0.2 * 2 ---> 0.4 取出整数部分 0 剩余0.4

0.4 * 2 ---> 0.8 取出整数部分 0 剩余0.8

-------> 循环往复,直到精度够为止...

最终二进制小数为:1100.1011002

总结

二进制小数点向左移动一位相当于这个数被2除,向右移动一位相当于将数乘2