我尝试在java中学习BitSet
集合。我已经读过它在里面使用了比特。
位组的每个*组件都有{@code boolean}值
我写了一个小应用程序:
BitSet bitSet = new BitSet();
bitSet.set(9);
bitSet.set(5);
bitSet.set(3);
System.out.println(bitSet);
System.out.println(Arrays.toString(bitSet.toByteArray()));
我想知道我可以将值与1和0区分开来。
我也不理解输出:
{3, 5, 9}
[40, 2]
请解释一下这个系列的用法吗?
答案 0 :(得分:7)
您设置位数3,5和9:
byte# 1 0
index … 9 8 7 6 5 4 3 2 1 0
value … 1 0 0 0 1 0 1 0 0 0
二进制10
是十进制2
(2¹= 2)。
二进制00101000
是十进制40
(2³+2⁵= 8 + 32 = 40)。
答案 1 :(得分:6)
BitSet
逻辑上表示根据需要增长的"位向量" (javadoc)。
通过new BitSet()
创建时,所有位都设置为0(false)。
0 5 10
| | |
000000000000... (virtually infinite sequence)
使用set(x)
设置为1(真)位 x (第一个位置为0)的位;例如在您的代码中启用第3,5和9位。
0 5 10
| | |
000101000100...
toString()
报告设置为1的位列表,即示例中的3,5和9。
toByteArray()
将BitSet
的内容转换为一系列byte
值,每个值包含8个连续位的值,以小端顺序排列(即从最小的索引开始) BitSet
)。示例中的输出{40, 2}
来自:
7 0 15 8 <- position in BitSet
| | | |
{00101000 , 00000010} <- toByteArray(), binary
| |
{ 40 , 2 } <- toByteArray(), decimal
希望这有帮助。
答案 2 :(得分:4)
BitSet.set(int bitIndex)将指定索引处的位设置为true。
所以bitSet.set(9);
翻转第9位到第1位
输出:
System.out.println(bitSet);
打印toString的结果,该结果符合JavaDoc:对于此BitSet包含处于set状态的位的每个索引,该索引的十进制表示包含在结果中。小号
Arrays.toString(bitSet.toByteArray())
打印BitSet的byte representation。 逐步分割你的二进制集:1000101000
到字节:10 00101000
这是2和40十进制。