Java检查标志是否以整数

时间:2018-05-30 15:42:54

标签: java binary hex bit-shift

我感觉到这个问题的答案是有点转变,但我无法理解我的大脑。

我已经读取了一些整数值,总是不同,我需要查看是否通过查看位模式来设置某些标志。

Flags:
0x00000002 = Do thing 
0x80000000 = Do another thing

Value: 0x80000002

所以看看这个值,应该设置两个标志。但我不确定实现这一目标的最佳方法。我想我可以使用BigInteger.testBit();,但我真的不想弄清楚每个标志中的确切位(有很多)。

我记得很久以前在C中做过类似的事情,它就像if (value & flag),但Java似乎并不喜欢这样。

任何建议的想法,将不胜感激。

由于

2 个答案:

答案 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

你必须确保每个标志只使用一位。如果你是,那就更复杂了。