2011-02-02 12 views
5

Powiel możliwe:?
BitSet to and from integer/longKonwersja BitSet int

Jak przekonwertować class BitSet int (zawsze mam Bitset (8) Czy istnieje prosty sposób lub I trzeba pętli przez zestaw bitów?

+1

Jakiego rodzaju konwersji oczekujesz od arbitralnie dużego 'BitSet'? –

+1

Naprawdę nie duplikat. Drugie pytanie pokazuje, jak utworzyć zestaw bitów z długiej, a nie odwrotnie. – dogbane

+1

Drugie pytanie wymaga "do i od", więc obejmuje to pytanie, ale niestety najwyższa odpowiedź obejmuje tylko konwersję z int do zestawu bitowego. – Joel

Odpowiedz

1

Ponieważ nie można uzyskać dostępu do wartości bezpośrednio za pomocą api bitsetów, musisz wykonać iterację w następujący sposób:

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

To powinno wystarczyć ...

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; 
} 

Przypuszczam można użyć nextSetBit aby uczynić go bardziej wydajne, ale to przesada, to naprawde dodać więcej narzut niż pomoc ...

+0

Wykonam bezużyteczne iteracje dla zestawu bitów OP o rozmiarze 8. – dogbane

+0

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

2

Wypróbuj:

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

Wykonam bezużyteczne iteracje dla dużych bitsetów ... – st0le

+0

, a po drugie, jest to 'bitSet.size()' ... nie 'length()' – st0le

+0

@ st0le OP powiedział 'BitSet (8)' – dogbane