我有一个标志位的问题。 我有一个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