我感觉到这个问题的答案是有点转变,但我无法理解我的大脑。
我已经读取了一些整数值,总是不同,我需要查看是否通过查看位模式来设置某些标志。
Flags:
0x00000002 = Do thing
0x80000000 = Do another thing
Value: 0x80000002
所以看看这个值,应该设置两个标志。但我不确定实现这一目标的最佳方法。我想我可以使用BigInteger.testBit();
,但我真的不想弄清楚每个标志中的确切位(有很多)。
我记得很久以前在C中做过类似的事情,它就像if (value & flag)
,但Java似乎并不喜欢这样。
任何建议的想法,将不胜感激。
由于
答案 0 :(得分:2)
如果要使用位,可以使用AND
boolean isSet = (values & mask) == mask;
但是对于非常非常小的性能影响(可能还不够大),您可以使用EnumSet
boolean isSet = myEnumSet.contains(MyEnumReferencingTheOldIntegerValue)
答案 1 :(得分:1)
可能最简单的解决方案如下:
if ((value & 0x00000002) != 0)
// Do thing
if ((value & 0x80000000) != 0)
// Do other thing
你必须确保每个标志只使用一位。如果你是,那就更复杂了。