1. 程式人生 > >java實現十進位制整數或小數轉換成二進位制

java實現十進位制整數或小數轉換成二進位制

1. 十進位制整數

思路: 整數除以2,每次將餘數儲存起來,商迴圈除以2,直到商為0為止,然後將所有餘數逆序打印出來。

例子:

23/2  商: 11  餘數: 1
11/2  商: 5   餘數: 1
5/2    商: 2   餘數: 1
2/2    商: 1   餘數: 0
1/2    商: 0   餘數: 1

程式碼實現:

public StringBuilder intToBinary(int in) throws Exception{StringBuilder binary = new StringBuilder();
    while(in!=0){
        int quotient=in/2;  //商
int remender=in%2; //餘數 binary.append(remender); in=quotient; } return binary.reverse(); } public static void main(String[] args){ try { DecimalToBinary t = new DecimalToBinary(); System.out.println(t.intToBinary(23)); }catch (Exception e){ e.printStackTrace(); } }
Output: 10111

2. 十進位制小數

思路: 小數乘以2,每次乘完取整(1或者0)放到陣列中,然後將剩餘小數部分繼續乘以2,直到小數部分為0或者達到所要求的精度為止,再講所有餘數按順序打印出來。

例子:

0.813*2   整數部分: 1  小數部分: 0.626
0.626*2   整數部分: 1  小數部分: 0.252
0.252*2   整數部分: 0  小數部分: 0.504
0.504*2   整數部分: 1  小數部分: 0.008
0.008*2   整數部分: 0  小數部分: 0.016

程式碼實現:

public StringBuilder doubleToBinary(double d) throws Exception{
    return doubleToBinary(d,
4);//利用方法重灌實現預設引數 } public StringBuilder doubleToBinary(double d,int count) throws Exception{ if (count>32){ throw new Exception("The max bit must less than 32!"); } if(count==0){ throw new Exception("The min bit must bigger than 0"); } double multi=0; //每次的乘積 StringBuilder res=new StringBuilder(); while(count>=0){ multi=d*2; if(multi>=1){ res.append(1); d=multi-1; } else{ res.append(0); d=multi; } count--; } return res; }

3. 十進位制整數和小數

思路: 整數和小數分別轉換,然後將兩個陣列以小數點為分割分別打印出來。
例子:

程式碼實現:

public StringBuilder allToBinary(double deci) throws Exception {
    int in=(int)deci;  //取整數部分
double d= deci - in;  //小數部分
StringBuilder total = new StringBuilder();
total.append(intToBinary(in));
total.append(".");
total.append(doubleToBinary(d));
    return total;
}

4. 測試:

public static void main(String[] args){
    try {
        DecimalToBinary t = new DecimalToBinary();
System.out.println(t.intToBinary(23));
System.out.println("0."+t.doubleToBinary(0.23));
System.out.println(t.allToBinary(23.23));
}catch (Exception e){
        e.printStackTrace();
}
輸出:

10111
0.00111
10111.00111