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?
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?
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);
}
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 đỡ ...
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;
Loại chuyển đổi nào bạn mong đợi cho một 'BitSet' tùy ý? –
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
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