十進制數轉換為二進制數


 這是個非常基礎的問題。一般在計算機引論書籍中的第一章出現。


對於十進制數的整數部分,一般使用除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();
}




注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com