在不使用parseInt或toString的情况下,编写一个将接收二进制字符串并将其转换为数字的函数

时间:2018-12-24 02:16:26

标签: string binary parseint

二进制描述仅以1和0表示的数字。学习二进制仅仅是意味着学习一种新的计算和计算数字的方式。在编码的大多数情况下,您实际上不需要了解二进制。但是,在面试中可能遇到的一些编码挑战将要求您操纵二进制数。以此为契机,学习一种新颖的技能并开始您的求职准备。

2 个答案:

答案 0 :(得分:0)

如果您的问题只是获取代表无符号值的位的字符串,则可以使用以下伪代码完成此操作:

accumulator = 0
for each character in string:
    multiply accumulator by two
    if character is '1':
        add one to accumulator

例如,字符串1101的处理方式如下:

character  accumulator
---------  -----------
                     0
        1            1 (0 * 2 + 1)
        1            3 (1 * 2 + 1)
        0            6 (3 * 2 + 0)
        1           13 (6 * 2 + 1)

将其翻译成几乎任何任何具体程序语言应该相对容易。

答案 1 :(得分:-1)

在Java中,将二进制字符串转换为整数的代码为:-

int strToInt(String str) {
    int sum=0;
    for(int i = str.length()-1; i >= 0; i--) {
        if(str.charAt(i) == '1')
             sum+=Math.pow(2, str.length() - 1 - i);
    }
return sum;
}

我们知道二进制字符串将转换为以下内容:-

int('10110')= 1 * 2 4 + 0 * 2 3 + 1 * 2 2 + 1 * 2 < sup> 1 + 0 * 2 0

要考虑的是有效地将2 length-1-index 与相应的位相乘。

代码将按以下方式运行:-

index                                       0      1     2     3     4
length-1-index                              4      3     2     1     0
2^(length-1-index)                          2^4    2^3   2^2   2^1   2^0
Corresponding Bits of bitstring             1      0     1     1     0

Multiplication of the above two columns     16      0     4    2     0

总结最后一行,我们得到22,这是相应的整数。