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;
}