在进行十进制数转换为二进制数时,可有如下变换:
为求等价的二进制数,将{Xn}设为转化后的每个数位上的数字、A、B分别作为分子分母,且A/B为非假分数,若为假分数,相关处理看伪码部分。
设A/B(十进制分数)=0.x1,x2,x3,...xn (转化而成的n位二进制)
若 2A>=B,则得一位二进制数 ”1“,且A=2A-B;
若2A<B,则得一位二进制数”0“,且A=2A;
重复如上操作,直至A-B=0。
如11/16 = 0.1011
2*11=22(>16)①;进位“1”, 此时二进制数=0.1
(22-16)*2=12(<16)②;进位“0”,此时二进制数=0.10
12*2=24(>16)③;进位“1”, 此时二进制数 =0.101
(24-16)*2=16(>=16)④;进位“1”, 此时二进制数 = 0.1011
16-16=0 ,done
output=0.1011
连贯起来便2*11→(22-16)*2→12*2→(24-16)*2→16-16→0
伪码:
①对十进制分数A/B,进行判断,若A>B,则A = A% B,且记录假分数的整数部分F = A / B。
②判断A == B?若False 则跳转至③,若True 则跳转至④。
③判断 A * 2 >= B?若True:
数组{Xn}(用于存储二进制中每一位数),Xi = 1;
A = A * 2 - B;
返回②。
若False:
Xi = 0;
i = i + 1 (i用于控制数组下标移动,且初始值为0);
返回②。
④输出F与小数点".",若i == 0 ,则不输出{Xn};否则一次性输出{Xn},输出范围从下标0 ~ i-1。