2015-10-16 39 views
0

我工作的一門功課,我想我說完了,但老師告訴我,這是不是他要找的,所以我需要知道我可以轉換一個二進制數字,它以字符串的形式存儲到十進制字符串中,而不使用任何內置函數,超出了Java中length(),charAt(),冪函數和floor/ceiling的範圍。如何將二進制字符串轉換爲十進制字符串中的Java

這是我對開始的。

import java.util.Scanner; 

public class inclass2Fall15Second { 
    public static void convertBinaryToDecimalString() { 
     Scanner myscnr = new Scanner(System.in); 

     int decimal = 0; 

     String binary; 
     System.out.println("Please enter a binary number: "); 
     binary = myscnr.nextLine(); 
     decimal = Integer.parseInt(binary, 2); 
     System.out.println("The decimal number that corresponds to " + binary + " is " + decimal); 
    } 

    public static void main (String[] args) { 
     convertBinaryToDecimalString(); 
    } 
} 
+0

向我們展示你已經嘗試過。沒有任何代碼,我們無法幫助你。 –

+0

你在編碼的語言是什麼?沒有這些信息,我們將無法爲您提供幫助。 –

+0

我用信息更新了我的帖子。我很抱歉沒有具體。 –

回答

1

要轉換的基座2(二進制)表示爲10進制(十進制),乘以2 ^(位位置)的每個比特的值和的值相加。

例如(1 * 2^0)+(1 * 2^1)+(0 * 2^2)+(1 * 2^3)= 1 + 2 + 0 + 8 = 11

由於二進制從右至左讀(即LSB(最低顯著位)是最右邊位和MSB(最顯著位)是最左邊位),我們遍歷以相反的順序串。

爲了得到位值,從焦炭減去「0」。這將減去ascii值爲'0'的字符的ascii值,給出該位的整數值。

要計算2 ^(位的位置),我們可以保持該位位置的計數,並增加在每次迭代計數。然後,我們可以做1個< <計數,以獲得2 ^(位的位置)的值。另外,你也可以做Math.pow(2,count),但前者更有效率,因爲它只是一個左移指令。

下面是實現上面的代碼:

public static int convertBinStrToInt(String binStr) { 
    int dec = 0, count = 0; 
    for (int i = binStr.length()-1; i >=0; i--) { 
     dec += (binStr.charAt(i) - '0') * (1 << count++); 
    } 

    return dec; 
} 
+0

非常感謝你@zindigo。它現在很有意義,我很欣賞詳細的解釋,它幫助我更好地理解代碼。 –

相關問題