java - 如何让BitSet不被简化【JAVA】

标签 java bit bitset

我正在使用 BitSet 来表示可能的讲座时间,情况是当您将角位设置为 false 时,它们会被简化,这意味着它们不再在位集。怎么让BitSet不化简呢?

为了让我的解释更清楚,这是代码:

   for(Map.Entry<GrupAssig, BitSet> entry : bitsetPerGrup.entrySet()){

            BitSet bitset = entry.getValue();

            //n franges per dia
            int numFranges = UnitatDocent.getNumFranges();
            int indexDia = this.dia.id() * numFranges;

            bitset.clear(indexDia, indexDia+numFranges);
     }

假设 bitset 默认有 60 位,numFranges=12 和 this.dia.id()=4。这将使最后十二位设置为 0。我得到的结果是:

11111111111111111111111111111111111111111111111

但是如果 this.dia.id()=3 我得到:

11111111111111111111111111111111111100000000000011111111111

您可以这样打印 BitSet:

    public static void printBitset(BitSet b) {
        StringBuilder s = new StringBuilder();
        for( int i = 0; i < b.length();  i++ )
        {
            s.append( b.get( i ) == true ? 1 : 0 );
        }

        System.out.println( s );
    }

这证明了我在说什么。

谢谢。

最佳答案

这是 BitSet.length 的文档:

length()
Returns the "logical size" of this BitSet: the index of the highest set bit in the BitSet plus one.

如果您需要打印出一定数量的位(例如 60),那么在您的循环中使用常量而不是“.length()”。无论长度如何,您都可以对任何索引调用“.get(index)”,它会为您提供该位的结果。

例如,以下代码生成“0000011000”:

import java.util.BitSet;

public class Main {

    public static void main(String[] args) {
        BitSet bits = new BitSet();
        bits.set(5);
        bits.set(6);
        StringBuilder bitString = new StringBuilder();
        for (int i = 0; i < 10; i++) {
            bitString.append(bits.get(i) ? "1" : "0");
        }
        System.out.println(bitString.toString());
    }
}

关于java - 如何让BitSet不被简化【JAVA】,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53242039/

相关文章:

java - java中linkedList的序列化和反序列化

C:在 O(1) 中将整数的第 i 位设置为 1

Java - 位级字节数组算术?

c++ - 将 uint8_t 的 vector 转换为位集

java - spring 集成 tcp 服务器关闭

java - 客户端-服务器处理错误

java - 将 JAR 资源作为 FileStream 打开

c++ - MySQL 和 Sparksee 数据库中的自定义大小整数

c++ - << 模板类对象的运算符重载

c++ - 为什么 std::bitset 建议的可用位比 sizeof 所说的更多?