在Java中,您可以创建一个大小为8的BitSet并将其存储为一个字节以便输出吗? BitSets上的文档没有提到它。这是否意味着没有?
答案 0 :(得分:5)
您无法将BitSet
投射到byte
。
您可以编写代码来执行您想要的操作。如果BitSet
名为bits
,请转到:
byte output = 0;
for (int i = 0; i < 8; i++) {
if (bits.get(i)) {
output |= 1 << (7 - i);
}
}
更新:上面的代码假设您的位从左到右编入索引0到7。例如。假设位01101001
,您认为位0是最左边的0.如果您从右到左分配位,那么位0将是最右边的1.在这种情况下,您希望output |= 1 << i
代替
答案 1 :(得分:2)
没有内置任何内容。你可以自己实现这一点。
答案 2 :(得分:0)
位设置是位数组
JVM使用32位堆栈单元,即JVM中的每个寄存器都存储一个32位地址
我们知道原始布尔值设置为1位但处理为32位。布尔数组将被视为字节数组
在BitSet中的位集的每个组件都有一个布尔值
每个位集都有当前大小, 这是空间的位数 目前由位集使用。注意 大小与之相关 执行一个位设置,所以它可能 改变实施。长度 位集的相关逻辑长度 有点集并定义 独立于实施。
答案 3 :(得分:-1)
BitSet类显然不是要将其位导出或导入到本机数据类型,如果你只想处理单个字节的固定大小,那么它也很重要。因此,如果您只想独立操作一个字节的位然后使用结果字节,那么它可能不是您所需要的。看起来您可能只想使用这样的API:
SimpleBitSet bs = new SimpleBitSet( 'A' );
bs.setBit( 5 );
byte mybyte = bs.getByte();
因此,这种简化位集的实现可能如下所示:
public class SimpleBitSet
{
private byte bits;
public SimpleBitSet( int bits )
{
this.bits = (byte) bits;
}
public byte getByte()
{
return bits;
}
public boolean getBit( int idx )
{
checkIndex( idx );
return ( bits & ( 1 << idx ) ) != 0;
}
public void setBit( int idx )
{
checkIndex( idx );
bits |= 1 << idx;
}
public void clearBit( int idx )
{
checkIndex( idx );
bits &= ~( 1 << idx );
}
protected void checkIndex( int idx )
{
if( idx < 0 || idx > 7 )
throw new IllegalArgumentException( "index: " + idx );
}
}