Java 使用基本数学运算符将二进制字符串转换为整数

Java 使用基本数学运算符将二进制字符串转换为整数,java,binary,Java,Binary,主要内容: 类别: public class Main{ public static void main(String[] args){ System.out.println(Convert.BtoI("10001")); System.out.printl

主要内容:

类别:

public class Main{                                      
  public static void main(String[] args){                                       
    System.out.println(Convert.BtoI("10001"));                                  
    System.out.println(Convert.BtoI("101010101"));                                              
  }                                     
}

所以我在研究转换器,我很挣扎,因为我是java新手,我的朋友建议使用integer方法,这很有效。但是,使用基本运算符(如逻辑运算符、算术运算符等)转换时,哪种方法最有效。

如果要使用基本算术将二进制数转换为整数,则可以使用以下代码替换convert类中的BtoI方法

public class Convert{                                       
  public static int BtoI(String num){                                       
    Integer i= Integer.parseInt(num,2);                                     
    return i;                                       
  }                                     
}
在上述代码中执行正常计算以获得结果。例如 101=>1*2^2+0+1*2^0=5

。。。。我的朋友建议使用整数方法,这很有效

正确:

它起作用了,而且 这是最好的办法。 但是,使用基本运算符(如逻辑运算符、算术运算符等)转换时,哪种方法最有效

如果您是Java新手,那么不应该过分关注代码的效率。你没有直觉

你可能不应该优化它,即使你有经验。在大多数情况下,小规模的效率是不相关的,在开始优化之前,最好使用探查器来验证您对重要内容的直觉

即使这是应用程序中的一个性能热点,Integer.parseint代码无疑已经得到了很好的优化。使用基本操作几乎不可能做得更好。在引擎盖下,这些方法很可能已经在做与您将要做的相同的事情


如果您只是出于好奇而问这个问题,请查看Integer类的源代码。

不需要使用Math.pow。而是使用101=10*2+1=1*2+0*2+1。这是非常有效的,并且避免了由于浮点运算而产生的陷阱,这不是int的问题,但是长时间的适应将失败。代码的复杂度也大大降低了是的,但我认为这个人在这方面非常基础,他需要理解手动算法,所以我这么做了。哦,我现在理解了,谢谢你的分解,如果我不使用数学,而是使用+-/*,那么我必须更改if语句,因为它将1设置为int
public static int BtoI(String num){                                       
        int number = 0; // declare the number to store the result
        int power = 0; // declare power variable

        // loop from end to start of the binary number
        for(int i = num.length()-1; i >= 0; i--)
        {
            // check if the number encountered is 1
            /// if yes then do 2^Power and add to the result
            if(num.charAt(i) == '1')
                number += Math.pow(2, power);
            // increment the power to use in next iteration
            power++;
        }
        // return the number
        return number;
      }