首先先教怎么将小数转换成二进制,这是基础
假如有数字 80.125怎么将其转换成二进制呢?
对于整数部分 80 转换成二进制想必大家都会的吧,就是 1010000
而对于小数部分 0.125怎么转换成二进制呢,可以看下面的图( 一直乘 2 遇到 1 退出 )
所以最终转换成的二进制数就是
假如有个数字 12.2,怎么将其转换成二进制呢对于整数部分 12 转换成二进制,想必大家都会的吧就是 1100
而对於后面的 0.2 ,怎么转换成二进制呢可以看下面的图( 一直乘 2 ,遇到 1 退出 )
所以最终转换成的二进制数就是1...( 小数部分 0011 无限循环因为不管塖多少次 2 都不可能遇到 1 )
好,看懂了上面的两张图基本上就明白了小数怎么转换成二进制数了
接下来讲怎么将浮点数转换成二进制
先看┅下 float 的存储结构,如下图所示
因为它是负数所以符号位就是 1 (相反,正数的话符号位就是 0 )
我们先将 12.75(忽略负号)转换成二进制小数 1100.11 (這里看不懂再去看看上面两张图)
然后再将这个二进制小数转换成科学计数法 1.10011 * ,这时候我们就得到了尾数部分
为小数部分10011,后面补0占满23位,即
最后我们只差指数位没有填进去了,理所当然的指数位就是要把 的 3 填进去,怎么填进去呢(注意:指数也有可能是负数)
接下来我再来讲个特殊情况假如浮点数 0.2 怎么转化成二进制
首先将其转化成二进制小数 0.0011......( 小数部分 0011 无限循环)
因为数字是正数,所以符号位是 0