2010-08-16 2 views
4

Булевский массив можно считать двоичным числом, например.Java - преобразование булева [] в десятичное

boolean[] four = {true, false, false}; //100 

Я хотел бы преобразовать такой массив в его десятичный эквивалент, например.

int decimal = convertBooleanArrayToDecimal(four); 
//decimal == 4 

Как это сделать?

Приветствия,

Пит

ответ

5

Попробуйте что-то вроде этого.

long result = 0; 
for (boolean bit : four) { 
    result = result * 2 + (bit ? 1 : 0); 
} 
+0

Просмотрите это выражение! Я считаю, что вы умножаетесь на (2 + бит), а не добавляете бит и умножаетесь на 2. –

+0

@Carl: Я уверен, что умножение имеет приоритет. Но пара парнеров, чтобы уточнить/обеспечить, чтобы это не повредило. – BlairHippo

+0

@ Карл. Ты прав, я тоже видела ошибку и исправила это. –

3

Альтернативное решение:

long result = 0; 
for (boolean bit: boolArray) 
{ 
    result <<= 1; 
    if (bit) result += 1; 
} 

Это математически эквивалентно решению Никиты, но я нахожу бит смены версии, чтобы быть более четким.