Приведение логического массива в Java? - PullRequest
1 голос
/ 07 октября 2009

Могу ли я привести логический массив в Java? Было бы хорошо, если бы я мог сказать

boolean[] bools = new boolean[8];
int j = (int)bools;

Но я не уверен, возможно ли это на Java.

Ответы [ 5 ]

4 голосов
/ 07 октября 2009

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

3 голосов
/ 07 октября 2009

Вот один быстрый и грязный способ преобразования из boolean[] в целое число:

static int intFromBooleanArray(boolean[] array) {
    return new BigInteger(Arrays.toString(array)
                          .replace("true", "1")
                          .replace("false", "0")
                          .replaceAll("[^01]", ""), 2).intValue();
}

пример:

intFromBooleanArray(new boolean[] {true, false, true, false, true, false});
// => 42.
3 голосов
/ 07 октября 2009

размер Java-логических значений зависит от конкретной реализации, и, вероятно, в любом случае это не единичный бит. если вы хотите простой способ манипулирования битами, взгляните на BitSet .

3 голосов
/ 07 октября 2009

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

final int BIT_1 = 0x00000001;
final int BIT_2 = 0x00000002;

// represents a bit mask
int value;

// enable bit 2
value |= BIT_2

// switch off bit 1
value &= ~BIT_1

// do something if bit 1 is set...
if (value & BIT_1) {

и т.д.. См. здесь для дополнительных примеров.

0 голосов
/ 07 октября 2009

Вы можете разыграть boolean[] до Object, но это все.

...