为何可通过乘2法转换十进制浮点数为二进制?原理解析
浮点数小数部分转二进制的原理
核心逻辑其实来自二进制小数的十进制转换规则:
二进制小数的形式是 0.b₁b₂b₃...,其中每一位bₙ只能是0或1,它对应的十进制值是:b₁×(1/2) + b₂×(1/4) + b₃×(1/8) + ... + bₙ×(1/2ⁿ) + ...
拿你提到的0.625反向推导,就能明白乘2取整的方法为什么有效:
- 假设十进制的0.625等于某个二进制小数
0.b₁b₂b₃...,代入上面的公式:0.625 = b₁×(1/2) + b₂×(1/4) + b₃×(1/8) + ...
- 两边同时乘以2,左边得到1.25,右边展开后:
1.25 = b₁ + b₂×(1/2) + b₃×(1/4) + ...
这里右边的b₁是整数位(只能是0或1),剩下的部分都是小于1的小数。所以左边的整数部分1就等于b₁,把b₁记下来,剩下的小数部分0.25继续处理。 - 把剩下的0.25重复操作,乘以2得到0.5:
0.5 = b₂ + b₃×(1/2) + ...
左边整数部分是0,所以b₂=0,剩下小数0.5。 - 再把0.5乘2得到1.0:
1.0 = b₃ + ...
左边整数部分是1,所以b₃=1,剩下小数为0,转换结束。
最终得到的二进制小数就是0.b₁b₂b₃也就是0.101,和计算结果完全匹配。
简单说,每次乘2的本质是把二进制小数的下一位“推”到整数位上,取这个整数位就是当前二进制位的取值,剩下的小数部分继续重复这个过程,直到小数为0或者达到精度要求。
内容的提问来源于stack exchange,提问作者ikhvjs
相关产品推荐
相关产品推荐

