Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将字符串二进制转换为整数Java_Java_Algorithm - Fatal编程技术网

将字符串二进制转换为整数Java

将字符串二进制转换为整数Java,java,algorithm,Java,Algorithm,读这篇文章时,我遇到了将二进制转换为整数的问题。 本书给出的代码为: // convert a String of 0's and 1's into an integer public static int fromBinaryString(String s) { int result = 0; for (int i = 0; i < s.length(); i++) { char c = s.charAt(i);

读这篇文章时,我遇到了将二进制转换为整数的问题。 本书给出的代码为:

 // convert a String of 0's and 1's into an integer
    public static int fromBinaryString(String s) {
       int result = 0;
       for (int i = 0; i < s.length(); i++) {
          char c = s.charAt(i);
          if      (c == '0') result = 2 * result;
          else if (c == '1') result = 2 * result + 1;
       }
       return result;
    }
我知道我的代码有一个额外的计数器,它可能有点慢,但我实现解决方案的方法是遵循多项式定义

x=xnb^n+xn-1b^n-1+…+x1b^1+x0b^0

我不明白的是他们的解决方案是如何工作的?
我已经调试过了,但仍然找不到什么是关键。有人能解释一下吗

它们基本上用2*result移动结果,如果设置了位,则加1

示例:01101

1. iteration: result = 0 -> result * 2 = 0      (same as binary 00000)
2. iteration: result = 0 -> result * 2 + 1 = 1  (same as binary 00001)
3. iteration: result = 1 -> result * 2 + 1 = 3  (same as binary 00011)  
4. iteration: result = 3 -> result * 2 = 6      (same as binary 00110)
5. iteration: result = 6 -> result * 2 + 1 = 13 (same as binary 01101)
按位计算:8+4+1=13


或者,您可以将result=result*2替换为result复制多项式定义x=xnb^n+xn-1b^n-1+…+x1 b^1+x0 b^0您可以将其重写为

x = ((((...(((( xn * b + xn-1 ) * b + ...  )* b + x1 ) * b + x0 
其中,二进制表示为b=2,最左侧有n-1个括号

对于n=4,这如下所示

x = ((((x3*2)+x2)*2+x1)*2+x0 = x3 * 2^3 + x2 * 2^2 + x1 * 2^1 + x0 * 2^0
如果要解析以MSB x_n开始的字符串,指向LSB x_0,则在读取x_i时必须执行

 result = result * 2 + x_i 
在执行此结果之前,将存储该值

((...(((( xn * b + xn-1 ) * b + ...  )* b + x_(i+1) )
((...(((( xn * b + xn-1 ) * b + ...  )* b + x_i )
执行此结果后,将存储该值

((...(((( xn * b + xn-1 ) * b + ...  )* b + x_(i+1) )
((...(((( xn * b + xn-1 ) * b + ...  )* b + x_i )

通过归纳推理你可以证明你最终计算出了正确的答案。

Integer.parseInts,2有什么问题吗?他们只需手动设置int的每一位,即1或0和bitshift。旁注:上面的代码忽略了可能用于检测非二进制字符串(即不是0或1的字符)的else大小写。@Boristespider它可能更多地用于指示转换和二进制本身我想可以先