位集与整数/长整型/长整型之间的比特集
2022-08-31 16:35:23
如果我有一个想要执行位操作的整数,如何将其加载到?如何将其转换回整型或长整型?我不太关心 的大小 - 它总是32或64位长。我只想使用,,和方法而不是按位运算符,但是我找不到一种简单的方法来初始化具有数字类型的位集。java.util.BitSet
BitSet
set()
clear()
nextSetBit()
nextClearBit()
如果我有一个想要执行位操作的整数,如何将其加载到?如何将其转换回整型或长整型?我不太关心 的大小 - 它总是32或64位长。我只想使用,,和方法而不是按位运算符,但是我找不到一种简单的方法来初始化具有数字类型的位集。java.util.BitSet
BitSet
set()
clear()
nextSetBit()
nextClearBit()
以下代码从长整型值创建一个位集,反之亦然:
public class Bits {
public static BitSet convert(long value) {
BitSet bits = new BitSet();
int index = 0;
while (value != 0L) {
if (value % 2L != 0) {
bits.set(index);
}
++index;
value = value >>> 1;
}
return bits;
}
public static long convert(BitSet bits) {
long value = 0L;
for (int i = 0; i < bits.length(); ++i) {
value += bits.get(i) ? (1L << i) : 0L;
}
return value;
}
}
编辑:现在两个方向,@leftbrain:原因,你是对的
添加到finnw答案:还有BitSet.valueOf(long[])
和BitSet.toLongArray()
。所以:
int n = 12345;
BitSet bs = BitSet.valueOf(new long[]{n});
long l = bs.toLongArray()[0];