[英]Why Bitset allows values distinct from 1 and 0?
我嘗試在 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]
請解釋一下這個集合的用途?
您設置位編號 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
邏輯上表示“根據需要增長的位向量”(javadoc )。
當您通過new BitSet()
創建它時,您將所有位設置為 0 (false)。
0 5 10
| | |
000000000000... (virtually infinite sequence)
使用set(x)
將位置x (第一個位置為 0)處的位設置為 1(真); 例如,在您的代碼中,您啟用了第 3、5 和 9 位。
0 5 10
| | |
000101000100...
toString()
報告設置為 1 的位列表,即示例中的 3、5 和 9。
toByteArray()
將BitSet
的內容轉換為byte
值序列,每個byte
值包含 8 個連續位的值,以小端順序(即從BitSet
最少索引開始)。 您示例中的輸出{40, 2}
來自:
7 0 15 8 <- position in BitSet
| | | |
{00101000 , 00000010} <- toByteArray(), binary
| |
{ 40 , 2 } <- toByteArray(), decimal
希望這可以幫助。
BitSet.set(int bitIndex)將指定索引處的位設置為 true。
所以bitSet.set(9);
將位數 9 翻轉為 1
在輸出:
System.out.println(bitSet);
根據 JavaDoc 打印toString的結果:對於此 BitSet 包含處於設置狀態的位的每個索引,該索引的十進制表示包含在結果中。 秒
Arrays.toString(bitSet.toByteArray())
打印 BitSet 的字節表示。一步一步,它拆分你的二進制集:1000101000
到字節:10 00101000
這是 2 和 40 的十進制數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.