十进制数转换为二进制数

 这是个非常基础的问题。一般在计算机引论书籍中的第一章出现。


对于十进制数的整数部分,一般使用除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();
}



你可能感兴趣的:(Linux,操作系统,Cracking,Coding,Interview,字符串问题)