在Java中,您可以創建一個大小爲8的BitSet並將其存儲爲字節以便輸出它?有關BitSets的文檔沒有提及它。那是不是意思?將BitSet設置爲原始類型?
回答
您不能將BitSet
轉換爲byte
。
你可以編寫代碼來做你想做的事情。給定一個名爲BitSet
bits
,在這裏你去:
byte output = 0;
for (int i = 0; i < 8; i++) {
if (bits.get(i)) {
output |= 1 << (7 - i);
}
}
更新:上面的代碼假定您的位索引0到7從左至右。例如。假設位01101001
您認爲位0是最左邊的0.如果您要從右向左分配位,則位0將是最右邊的1.在這種情況下,您需要替換爲output |= 1 << i
。
你能解釋一下這行輸出| = 1 <<(7 - i); – 2011-04-18 18:19:41
@Trevor這顯然是一個不快樂的人遭到斷頭臺的襲擊。 :-) Nah,'| ='表示「或等於」,或者「output = output |」 1 <<(7 - i)'。現在'1 <<(7-1)'部分表示取1並將其移過來。所以你基本上說「把輸出的第i位設置爲1」。 – corsiKa 2011-04-18 18:24:26
'| ='取最後一個'輸出',並對它和'1 <<(7 - i)'執行按位或運算。本質上它是手動設置「輸出」字節的位。 – WhiteFang34 2011-04-18 18:26:05
沒有什麼內置的。你明顯可以實現這一點。
比特集合是比特
陣列JVM使用一個32位的堆單元即在JVM中存儲一個32位的地址的每個寄存器
我們知道原始布爾值被設置爲1但處理爲32位。布爾的陣列將被認爲是字節陣列
在BitSet中的比特組中的每個組件具有一個布爾值
每個位組具有電流的大小, 這是空間的比特數 當前正在使用的位集。注意 表示該大小與 執行一個位集有關,因此可能 隨實現而改變。位集合的長度爲 涉及位集合的邏輯長度爲 ,並且與實現無關地定義爲 。
BitSet類顯然不是意圖將其位導出或導入本機數據類型,而且如果您只是想處理單個字節的固定大小,那麼也很沉重。如果你只是想獨立操作一個字節的位,然後使用結果字節,那麼它可能不是你所需要的。看來你可能只是想用這樣的API:
SimpleBitSet bs = new SimpleBitSet('A');
bs.setBit(5);
byte mybyte = bs.getByte();
所以這樣的簡化位set的實現看起來是這樣的:
public class SimpleBitSet
{
private byte bits;
public SimpleBitSet(int bits)
{
this.bits = (byte) bits;
}
public byte getByte()
{
return bits;
}
public boolean getBit(int idx)
{
checkIndex(idx);
return (bits & (1 << idx)) != 0;
}
public void setBit(int idx)
{
checkIndex(idx);
bits |= 1 << idx;
}
public void clearBit(int idx)
{
checkIndex(idx);
bits &= ~(1 << idx);
}
protected void checkIndex(int idx)
{
if(idx < 0 || idx > 7)
throw new IllegalArgumentException("index: " + idx);
}
}
- 1. 將設置值設置爲原始類型的實例
- 2. 將控制位置設置爲原始
- 3. 整型爲原始類型
- 4. typedef - 原始類型到原始類型
- 5. 原型中原始類型的行爲
- 6. 將原始類型轉換爲int
- 7. 將原始類型應用到原始類型
- 8. 將原始資源設置爲鈴聲
- 9. JAVA BitSet設置
- 10. c:設置標籤以設置非原始類型值
- 11. 與原始類型
- 12. Bash原始類型
- 13. 將所有Xcode設置還原爲原始狀態
- 14. 如何將LED配置重置爲原始設置
- 15. 將Gridster重置爲原始位置
- 16. 無法調用設置Double(Double)對原始類型雙重
- 17. Java反射〜設置原始類型的內部對象值
- 18. 在SQLAlchemy原始SQL中設置輸入參數類型
- 19. 將封裝類轉換爲原始類
- 20. 將滑塊設置爲初始位置 - 反應原生
- 21. 如何將listview設置爲原始位置?
- 22. 集合成爲一個原始類型
- 23. 原始數據類型爲空
- 24. SSE數據類型和原始類型
- 25. WSGI - 將內容類型設置爲JSON
- 26. Boost.Any獲得原始類型
- 27. 比較原始類型
- 28. Objective-C setValue:forKey原始類型
- 29. OCMockito捕獲原始類型?
- 30. Hashtable的原始類型
似乎是很明顯的功能,不知道爲什麼它WASN不包含在jdk中。 – jtahlborn 2011-04-18 18:02:26
由於基元不是對象,因此您無法將對象轉換爲基元。 – 2011-04-18 18:05:13
@Steve郭 - 他沒有要求鑄造。你可以像BitSet.asByte()那樣返回一個包含前8位的字節。 (就此而言,自動拆箱_does_允許您將某些對象投射到基元)。 – jtahlborn 2011-04-18 18:15:16