Java:从BitSet中提取整数,每个整数由特定的位数组成

标签 java bitwise-operators bitset

如果我有一个长度为 500 位的 Java BitSet,并且我知道它包含 100 个整数,每个整数由 5 位表示,那么如何提取这些整数的数组?使用一些在线示例,我得出以下结论:

static int[] bitSet2Ints(BitSet bs, int bitNumber) 
    {
        int[] temp = new int[bs.length() / bitNumber];

        for (int i = 0; i < temp.length; i++)
        {
            for (int j = 0; j < bitNumber; j++)
            {
                if (bs.get(i * bitNumber + j))
                {
                    temp[i] |= 1 << j;
                }
            }
        }

        return temp;
    }

我想知道这是否是正确的方法。

谢谢!

编辑:显然,代码没有产生预期的结果。我做了一个单元测试,输入和输出完全不同:

这是我的输入:

Binary String: 0 is 00000
Binary String: 1 is 00001
Binary String: 2 is 00010
Binary String: 3 is 00011
Binary String: 4 is 00100
Binary String: 5 is 00101
Binary String: 6 is 00110
Binary String: 7 is 00111
Binary String: 8 is 01000
Binary String: 9 is 01001
Binary String: 10 is 01010
Binary String: 11 is 01011
Binary String: 12 is 01100
Binary String: 13 is 01101
Binary String: 14 is 01110
Binary String: 15 is 01111
Binary String: 16 is 10000
Binary String: 17 is 10001
Binary String: 18 is 10010
Binary String: 19 is 10011
Binary String: 20 is 10100
Binary String: 21 is 10101
Binary String: 22 is 10110
Binary String: 23 is 10111
Binary String: 24 is 11000
Binary String: 25 is 11001
Binary String: 26 is 11010
Binary String: 27 is 11011
Binary String: 28 is 11100
Binary String: 29 is 11101
Binary String: 30 is 11110
Binary String: 31 is 11111

这是我的输出:

NUMBER OF VALUES EXTRACTED: 32
INTEGER CONVERTED: 0
INTEGER CONVERTED: 16
INTEGER CONVERTED: 8
INTEGER CONVERTED: 24
INTEGER CONVERTED: 4
INTEGER CONVERTED: 20
INTEGER CONVERTED: 12
INTEGER CONVERTED: 28
INTEGER CONVERTED: 2
INTEGER CONVERTED: 18
INTEGER CONVERTED: 10
INTEGER CONVERTED: 26
INTEGER CONVERTED: 6
INTEGER CONVERTED: 22
INTEGER CONVERTED: 14
INTEGER CONVERTED: 30
INTEGER CONVERTED: 1
INTEGER CONVERTED: 17
INTEGER CONVERTED: 9
INTEGER CONVERTED: 25
INTEGER CONVERTED: 5
INTEGER CONVERTED: 21
INTEGER CONVERTED: 13
INTEGER CONVERTED: 29
INTEGER CONVERTED: 3
INTEGER CONVERTED: 19
INTEGER CONVERTED: 11
INTEGER CONVERTED: 27
INTEGER CONVERTED: 7
INTEGER CONVERTED: 23
INTEGER CONVERTED: 15
INTEGER CONVERTED: 31

最佳答案

我们在这里谈论什么类型的“正确”?

您的代码看起来不错,并且似乎是解决您问题的完全合理的解决方案。如果由我决定,我会写一些不太嵌套的内容,以便于阅读。也许是这样的:

static byte[] bitSet2Ints(BitSet bs, int bitNumber) {
    byte[] temp = new byte[bs.length() / bitNumber];

    for (int i = 0; i < temp.length; i++){
        temp[i] = bs.get(i * bitNumber, (i + 1) * bitNumber).toByteArray()[0];
    }

    return temp;
}

*尚未测试此代码

您还可以添加参数检查以避免无效输入:

    if (bs == null){
        throw new NullPointerException("The bit set cannot be null!");
    }
    if (bitNumber <1 || bitNumber > 7){
        throw new IllegalArgumentException("Illegal bit count");
    }

关于Java:从BitSet中提取整数,每个整数由特定的位数组成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40567608/

相关文章:

java - 使用 Stack 上 Vector 类的 remove(item) 是否会保持 O(1) 弹出、查看、推送运行时间?

java - Asynctask类中的静态变量用还是反对?

java - 如何在 PassiveExpiringMap 中获取 TTL

c - 在公投中使用 C 位运算符 - 作业

java - ~ 在 Java 中是什么意思?

c++ - 从 bin 文件中读取十六进制数作为每个字符的 2 位数字-c++

c++ - 使用位集库

java - 我无法运行 WiEngine 骨架项目

c# - 为什么 Java 和 C# 中的逻辑运算符和按位运算符之间存在区别?

c++ - 将位集数组转换为整数数组