2011-02-02 2 views
5

Можно создать дубликат:
BitSet to and from integer/longПреобразование BitSet в целое

Как преобразовать класс класс BITSET в целое (я всегда BITSET (8) Есть ли простой способ или я нужно выполнить цикл через битовый набор?

+1

Какое преобразование вы ожидаете от сколь угодно большого «битСета»? –

+1

Не совсем дубликат. Другой вопрос показывает, как создать бит из длинного, а не другого. – dogbane

+1

Другой вопрос задает вопрос «от и до», поэтому этот вопрос охватывает этот вопрос, но, к сожалению, верхний ответ охватывает только преобразование из int в BitSet. – Joel

ответ

1

Поскольку вы не можете получить доступ к значениям непосредственно с помощью битов api, вам необходимо повторить так:

public static void main(String[] args) { 
     BitSet bs = new BitSet(); 
     bs.set(5); 
     System.out.println(bs); 
     int res = 0, pow = 1; 

     for (int i = 0 ; i < 32 ; i++ , pow <<= 1) { 
      if (bs.get(i)) { 
       res |= pow; 
      } 
     } 
     System.out.println("" + res); 
    } 
5

Это должно сделать это ...

public static int bitSetToInt(BitSet bitSet) 
{ 
    int bitInteger = 0; 
    for(int i = 0 ; i < 32; i++) 
     if(bitSet.get(i)) 
      bitInteger |= (1 << i); 
    return bitInteger; 
} 

Я полагаю, можно использовать nextSetBit, чтобы сделать его более эффективным, но это перебор, будет Prolly добавить больше накладных расходов, чем помочь ...

+0

Будут делать бесполезные итерации для битового набора OP размера 8. – dogbane

+0

@dogbane, touché ....: P – st0le

2

Попытка:

int result = 0 ; 
    for(int i = 0 ; i < bitSet.length() ; i++){ 
     if(bitSet.get(i)){ 
      result |= (1 << i); 
     } 
    } 
    result &= Integer.MAX_VALUE; 
    return result; 
+1

Будут делать бесполезные итерации для больших битов ... – st0le

+0

и, во-вторых, это 'bitSet.size()' ... not 'length()' – st0le

+0

@ st0le OP сказал 'BitSet (8)' – dogbane

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