循环二进制数转十进制:如何将0.10(₁)₂表示为分数a/b?
嘿,你这里踩了个很典型的坑——把二进制运算当成十进制来算了!2y - y的结果可不是十进制的91,得按二进制的规则来运算才行。下面给你两种清晰的正确解法:
正确解法:二进制循环小数转分数
方法一:二进制位运算推导
- 设
x = 0.10(₁)₂,也就是0.1011111...₂(末尾无限重复的1是循环节)。 - 先把小数点移到循环节的起始位置:循环节从第3位小数开始,我们乘以
2² = 4(对应二进制的100),得到:4x = 10.(₁)₂(即二进制的10.1111...) - 令
y = 10.(₁)₂,因为循环节长度是1,我们乘以进制数2,得到:2y = 101.(₁)₂(即二进制的101.1111...) - 用
2y - y抵消循环部分:
二进制减法中,小数部分的循环(₁)₂完全抵消,整数部分101₂ - 10₂ = 11₂,所以2y - y = 11₂ - 把
11₂转换成十进制是3,因此y = 3。代入4x = y,可得x = 3/4。
方法二:十进制等比数列求和推导
我们也可以把二进制数拆成十进制分数的和,直接计算:
- 把
0.10(₁)₂拆分为:0.1₂ + 0.001₂ + 0.0001₂ + 0.00001₂ + ... - 转换成十进制分数:
0.1₂ = 1/20.001₂ = 1/8,0.0001₂ = 1/16,0.00001₂ = 1/32……这是首项为1/8、公比为1/2的等比数列
- 用等比数列求和公式
S = 首项 / (1 - 公比),计算循环部分的和:(1/8) / (1 - 1/2) = 1/4 - 加上前面的
1/2,总和为:1/2 + 1/4 = 3/4
两种方法都得到了相同的结果,说明这个答案是正确的。
内容的提问来源于stack exchange,提问作者crytek12
相关产品推荐
相关产品推荐

