java實現十進位制整數或小數轉換成二進位制
阿新 • • 發佈:2019-01-05
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; //商Output: 10111int 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(); } }
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