Java BitSet带有尾随零

3

如何使用位集(BitSet)来表示以0结尾的位?

例如,要在BitSet中表示“10100”,我需要执行以下操作。

BitSet bits = new BitSet(5);
bits.set(0);
bits.set(2);

基于 Java Doc, length() - 返回这个 BitSet 的“逻辑大小”:BitSet 中最高位的索引加一。
size() - 返回该 BitSet 实际使用的位空间数量以表示位值。
因此,对于给定的示例,length() 返回“3”,size() 返回“64”,因为 BitSet 内部使用 long 。
对于给定的 BitSet,如何确定其中的实际位(在此情况下为 10100)?
附言:我正在研究压缩技术,不想使用 boolean[] 来表示它,因为数组中的每个条目都可以占用 1 字节。
谢谢!

可能是重复的问题,类似于 如何获取由BitSet表示的位数? - kennytm
1个回答

4
在BitSet中,零索引是最不重要的位。您的示例应该是:

BitSet中,零索引是最不重要的位。您的示例应该是:

BitSet bits = new BitSet(5);
bits.set(2);
bits.set(4);

现在,bits.length()返回5,正如预期的那样。

我曾认为零索引是最重要的位。感谢您的解释。 - user2492286
1
术语“最低有效位”和“最高有效位”只有在将位集解释为数字时才有意义。如果将它们解释为boolean值的字段,则索引只是一个索引,并且length()告诉您最后一个1位(或true值)的索引,这个事实不会改变。如果清除第4位,长度将发生变化。 - Holger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接