2010-08-16 5 views
4

부울 배열은 이진수로 간주 될 수 있습니다.자바 - 부울 []을 십진수로 변환

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

이 배열을 10 진수로 변환하고 싶습니다. 예 :

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

@Carl 네가 맞아, 나는 실수를보고 그것을 고쳤다. –

3

대체 솔루션 :

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

이 니키타의 솔루션을 수학적으로 동일하지만 나는 명확하게하기 위해 비트 이동 버전을 찾을 수 있습니다.