БЕЗ использования parseInt или toString, напишите функцию, которая будет принимать двоичную строку и преобразовывать ее в число - PullRequest
0 голосов
/ 24 декабря 2018

Двоичный описывает число, выраженное только в 1 и 0.Изучение бинарного просто означает изучение нового способа, который считает и вычисляет числа.Вам действительно не нужно знать двоичный код в большинстве случаев при кодировании;однако, некоторые проблемы с кодированием, которые вы можете получить во время интервью, потребуют от вас манипулирования двоичными числами.Рассматривайте это как возможность освоить новый навык и начать подготовку к поиску работы.

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

В 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 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, что соответствует целому числу.

0 голосов
/ 24 декабря 2018

Если ваш вопрос состоит в том, чтобы просто взять строку, представляющую биты беззнакового значения, это можно сделать с помощью следующего псевдокода:

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)

Это должно быть относительно легко перевести на любой конкретный процедурный язык.

...