2015-10-16 86 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。它现在很有意义,我很欣赏详细的解释,它帮助我更好地理解代码。 –

相关问题