2010-08-16 75 views
4

一個布爾數組可以被認爲是一個二進制數,例如Java - 將boolean []轉換爲十進制

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. – 2010-08-16 17:39:05

+0

@Carl:我很確定乘法優先。但是一對parens來澄清/確保它不會受到傷害。 – BlairHippo 2010-08-16 17:40:45

+0

@Carl你說得對,我也看到了錯誤並修復了它。 – 2010-08-16 17:40:52

3

另一種解決方案:

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

這在數學上等同於Nikita的解決方案,但我找到比特移位版本更清晰。

相關問題