2016-01-27 2 views
1

Как это сделать без использования умножения, деления или мода?Преобразование строкового двоичного кода в целое число

Я прихожу с решением, но оно требует размножения.

public StringBToInt(String b) { 
    int value = 0; 
    for(int z = 0; z < b.length(); z++) { 
     value = value * 2 + (int)b.charAt(i) - 48; 
    } 
} 

EDIT: SORRY! Допускается только 3 API Java. длина(), Шар() и равенство()

+0

Эта проблема домашняя ясно требует добавления. Можете ли вы использовать 'массивы' или' списки'? Является ли вход 'string' фиксированной длиной? –

+0

Да, это позволяет сложение и вычитание. Нет, вы не можете использовать массив или списки. только Integer и String с charAt(), length() и равно. –

+0

Что относительно длины ввода? Является ли фиксированная длина входного сигнала, есть ли изменчивость в пределах диапазона, или это возможно бесконечно долго? –

ответ

2

без умножения, использовать побитовый оператор сдвига:

public StringBToInt(String b) { 
    int value = 0; 
    for(int z = 0; z < b.length(); z++) { 
     if(b.charAt(z) == '1'){ 
      shift = b.length()-z-1; 
      value += (1 << shift); 
     } 
    } 
} 
+0

'if (b.charAt (z) .equals ('1') {'отсутствует закрывающая скобка и не работает - примитивный тип' char' не имеет метода 'equals'! – Clashsoft

+0

Вы правы, он выскользнул. Исправлено, thx. – Matt

1

Используйте метод Integer.valueOf(String, int):

Integer.valueOf('10101',2) 
1

Попробуйте использовать Integer.parseInt(..) так:

int value = Integer.parseInt(b, 2); 

Ofcourse b является бинарной строкой.

+0

'b.toCharArray() [i]' - расточительная версия 'b.charAt (i)' – Clashsoft

0

Вы можете использовать метод Integer.parseInt, чтобы сделать это.

String binary = "101010" 
int value = Integer.parseInt(binary, 2); 

'2' в Integer.parseInt означает для разбора String в базе 2.

Смежные вопросы