为什么 Bitset 允许值不同于 1 和 0?
Why Bitset allows values distinct from 1 and 0?
我尝试在 java 中学习 BitSet
集合。我读过它在内部使用位。
Each * component of the bit set has a {@code boolean} value
我写了一个小应用程序:
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]
请解释一下这个集合的用法?
BitSet.set(int bitIndex) 将指定索引处的位设置为真。
因此 bitSet.set(9);
将位编号 9 翻转为 1
关于输出:
System.out.println(bitSet);
根据 JavaDoc 打印 toString 的结果:
for every index for which this BitSet contains a bit in the set state, the decimal representation of that index is included in the result. S
Arrays.toString(bitSet.toByteArray())
打印 BitSet 的 byte representation。
一步一步,它分裂你的二进制集:1000101000
字节数:10 00101000
这是十进制的 2 和 40。
您设置位编号 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)。
BitSet
逻辑上表示一个 "vector of bits that grows as needed" (javadoc).
当您通过 new BitSet()
创建它时,您将所有位设置为 0(假)。
0 5 10
| | |
000000000000... (virtually infinite sequence)
使用 set(x)
将位置 x 的位设置为 1(真)(第一个位置为 0);例如在您的代码中启用位 3、5 和 9。
0 5 10
| | |
000101000100...
toString()
报告设置为 1 的位列表,即示例中的 3、5 和 9。
toByteArray()
将 BitSet
的内容转换为 byte
值的序列,每个值包含 8 个连续位的值,按 little-endian 顺序(即开始来自 BitSet
中的最少索引)。您示例中的输出 {40, 2}
来自:
7 0 15 8 <- position in BitSet
| | | |
{00101000 , 00000010} <- toByteArray(), binary
| |
{ 40 , 2 } <- toByteArray(), decimal
希望这对您有所帮助。
我尝试在 java 中学习 BitSet
集合。我读过它在内部使用位。
Each * component of the bit set has a {@code boolean} value
我写了一个小应用程序:
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]
请解释一下这个集合的用法?
BitSet.set(int bitIndex) 将指定索引处的位设置为真。
因此 bitSet.set(9);
将位编号 9 翻转为 1
关于输出:
System.out.println(bitSet);
根据 JavaDoc 打印 toString 的结果:
for every index for which this BitSet contains a bit in the set state, the decimal representation of that index is included in the result. S
Arrays.toString(bitSet.toByteArray())
打印 BitSet 的 byte representation。
一步一步,它分裂你的二进制集:1000101000
字节数:10 00101000
这是十进制的 2 和 40。
您设置位编号 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)。
BitSet
逻辑上表示一个 "vector of bits that grows as needed" (javadoc).
当您通过 new BitSet()
创建它时,您将所有位设置为 0(假)。
0 5 10
| | |
000000000000... (virtually infinite sequence)
使用 set(x)
将位置 x 的位设置为 1(真)(第一个位置为 0);例如在您的代码中启用位 3、5 和 9。
0 5 10
| | |
000101000100...
toString()
报告设置为 1 的位列表,即示例中的 3、5 和 9。
toByteArray()
将 BitSet
的内容转换为 byte
值的序列,每个值包含 8 个连续位的值,按 little-endian 顺序(即开始来自 BitSet
中的最少索引)。您示例中的输出 {40, 2}
来自:
7 0 15 8 <- position in BitSet
| | | |
{00101000 , 00000010} <- toByteArray(), binary
| |
{ 40 , 2 } <- toByteArray(), decimal
希望这对您有所帮助。