我有一個標誌位的問題。 我有一個int
變量來保存標誌。首先,我爲該變量設置了一些標誌。稍後我需要檢查在該變量中設置了多少個標誌。但我不知道這樣做。檢查標誌位java
38
A
回答
65
要檢查,看是否有位值設置:
int value = VALUE_TO_CHECK | OTHER_VALUE_TO_CHECK;
if ((value & VALUE_TO_CHECK) == VALUE_TO_CHECK)
{
// do something--it was set
}
if ((value & OTHER_VALUE_TO_CHECK) == OTHER_VALUE_TO_CHECK)
{
// also set (if it gets in here, then it was defined in
// value, but it does not guarantee that it was set with
// OR without other values. To guarantee it's only this
// value just use == without bitwise logic)
}
需要注意的是,你不應該有一個檢查值0,除非它代表全或無(不要使用位邏輯是很重要的以進行比較;僅使用value == 0
),因爲任何value & 0
總是爲0.
30
另外,考慮使用EnumSet
而不是位字段。另見Bloch, Item 32。
附錄:作爲一個具體的example:
枚舉集還提供了豐富的,類型安全的替代傳統的位標誌:
EnumSet.of(Style.BOLD, Style.ITALIC);
請特別注意從AbstractSet
繼承了方便的方法和AbstractCollection
。
14
如果你想檢查是否有a
所有標誌位b
集,您可以檢查它爲:
(a & b) == b
7
我使用了以下內容:
public class BitFlags
{
public static boolean isFlagSet(byte value, byte flags)
{
return (flags & value) == value;
}
public static byte setFlag(byte value, byte flags)
{
return (byte) (flags | value);
}
public static byte unsetFlag(byte value, byte flags)
{
return (byte) (flags & ~value);
}
}
但是,如果不需要它「低級別」,建議使用EnumSets
來代替額外的安全類型。
相關問題
- 1. 檢查標誌位的所有值java Android
- 2. 標誌 - 檢查位設置,只有那些位設置
- 3. JPQL查詢位標誌
- 4. SSIS檢查就緒標誌
- 5. JavaScript:枚舉標誌檢查
- 6. 標誌位計算和檢測
- 7. Java EnumSet - 添加並檢查是否包含一個標誌
- 8. 在Java中檢查標誌「if(flag = true)」是否真的如此?
- 9. C++檢查光標位置
- 10. 如何檢查Java控制檯日誌?
- 11. 標誌,System.out.format Java
- 12. 使用Enum.HasFlag()檢查標誌的UInt16?
- 13. g ++標誌只檢查語法?
- 14. 如何檢查sanbox中的cabal標誌
- 15. C++檢查函數的「標誌參數」
- 16. 如何檢查骯髒的標誌
- 17. SSE內在函數檢查零標誌
- 18. 在設計中檢查授權標誌
- 19. 復位isDirty標誌
- 20. 檢查光標在Java
- 21. 手標誌檢測
- 22. Java mouseEvent檢查鼠標在Jframe上被按下的位置
- 23. Netbean的Java日誌位置
- 24. 檢查updateRequest的地位ElasticSearch在Java中
- 25. 爲什麼中斷處理程序入口代碼檢查進位標誌?
- 26. 使用slt檢查無符號整數加法進位標誌mips
- 27. 如何檢查標誌組合的任何標誌是否已設置?
- 28. 檢查是否設置了所有標誌(沒有標誌空白)
- 29. 我應該如何檢查標誌枚舉中是否設置了標誌?
- 30. 使用位的標誌
這裏我沒有標誌(如VALUE_TO_CHECK)。我有另一個包含一些標誌的變量。所以我需要找到A包含所有的女巫是否存在於B中。 – Nagaraju 2011-05-20 04:27:35
@Naga raju所以請澄清你的問題。 – EJP 2011-05-20 04:35:31
如果你有一堆標誌設置的值:'int A = flag1 | flag3 | flag15;'你想看看它是否具有來自'B'的所有值:'int B = flag3 |在上面的代碼中,flag15;',then'B'_is_' VALUE_TO_CHECK':'if(A&B == B)'(忽略可怕的變量名)。另外,由於聽起來像你對此感到困惑,你應該參考垃圾回答併購買參考書(由Josh Bloch提供)。這是作爲Java開發人員擁有的最好的書。 – pickypg 2011-05-20 04:37:31