2011-02-02 34 views
5

Có thể trùng lặp:
BitSet to and from integer/longChuyển đổi BitSet để int

Làm thế nào để chuyển đổi lớp lớp BitSet để int (Tôi luôn luôn có BitSet (8) Có cách nào dễ dàng hay tôi cần phải lặp qua bitet?

+1

Loại chuyển đổi nào bạn mong đợi cho một 'BitSet' tùy ý? –

+1

Không thực sự là một bản sao. Câu hỏi khác cho thấy làm thế nào để tạo ra một bộ bit từ một dài, không phải là cách khác. – dogbane

+1

Câu hỏi khác yêu cầu 'đến và từ', để bao gồm câu hỏi này, nhưng tiếc là câu trả lời hàng đầu chỉ bao gồm việc chuyển đổi từ một int sang một BitSet. – Joel

Trả lời

1

Vì bạn không thể truy cập trực tiếp các giá trị bằng các bit api, bạn cần lặp lại như sau:

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

này nên làm điều đó ...

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

Tôi cho rằng người ta có thể sử dụng nextSetBit để làm cho nó hiệu quả hơn, nhưng đó là quá mức cần thiết, sẽ prolly thêm overhead hơn giúp đỡ ...

+0

Sẽ lặp lại vô ích cho các bit kích thước của OP 8. – dogbane

+0

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

2

Hãy thử:

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

Sẽ lặp lại vô ích cho các bit lớn ... – st0le

+0

và thứ hai, đó là 'bitSet.size()' ... không phải 'length()' – st0le

+0

@ st0le OP cho biết 'BitSet (8)' – dogbane

Các vấn đề liên quan