这是个非常基础的问题。一般在计算机引论书籍中的第一章出现。
对于十进制数的整数部分,一般使用除2取余法。
每次模2取得余数,然后除以2。直到除成0为止。将余数倒置相连就得到整数部分对应的二进制数。
除2取余法的理论依据是,整数部分的权值是2的幂数,每次除2都是将整体的权值右移一位,模2是取得最右边的数值。
对于十进制数的小数部分,一般使用乘2取整法。
不断乘2,如果结果小于1,取0,继续乘2;如果结果大于1,取1,减去1。直到结果为0为止。如果总也不能为0,就适时的停止。
乘2取整法的理论依据是,小数部分的权值是1/2的幂数,每次乘2都是将整体的权值左移一位,取整是取得最左位的数值。
给出一个十进制的浮点数,并且字符串形式的,现在要求将其转换为二进制数。
// 输入字符串是一个浮点数
public static String printBinary(String n)
{
int intPart = Integer.parseInt(n.substring(0, n.indexOf('.')));
// 取出整数部分
double decPart = Double.parseDouble(n.substring(n.indexOf('.'), n.length()));
// 取出小数部分
String int_string = "";
while(intPart > 0)
{
// 依次取出二进制形式的每一位,并连接起来
int r = intPart % 2;
int_string = r + int_string;
intPart >>= 1; //除2法
}
StringBuffer dec_string = new StringBuffer();
while(decPart > 0)
{
if(dec_string.length() > 32)
return "Error!";
double r = decPart*2; //乘2法
if(r > 1)
{
dec_string.append(1);
decPart = r - 1;
}
else if(r < 1)
{
dec_string.append(0);
decPart = r;
}
else
break;
}
return int_string + "." + dec_string.toString();
}