簡體   English   中英

為什么 Bitset 允許不同於 1 和 0 的值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM