Java check if flags are set in integer

0

I've got a feeling the answer to this is to bit shift, but I can't quite get my brain to grasp it.

I've got some integer values being read, always different, and I need to check if some flags are set by looking at their bit pattern, for example.

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

Value: 0x80000002

So looking at the value, both flags should be set. But I'm not sure of the best way to implement this. I guess I could use BigInteger.testBit();, but I don't really want to have to figure out the exact bit in each of the flags (there are a lot).

I can remember doing something like this in C a long time ago, it was something like if (value & flag), but Java doesn't seem to like this.

Any ideas of suggestions, would be greatly appreciated.

Thanks

java
binary
hex
bit-shift
asked on Stack Overflow May 30, 2018 by Tony

2 Answers

3

If you want to use bits, you could use AND

boolean isSet = (values & mask) == mask;

But for a very, very small performance hit (probably not big enough to notice) you can get this same basic principle with EnumSet

boolean isSet = myEnumSet.contains(MyEnumReferencingTheOldIntegerValue)
answered on Stack Overflow May 30, 2018 by corsiKa • edited May 30, 2018 by BackSlash
1

Probably the easiest solution is the following:

if ((value & 0x00000002) != 0)
    // Do thing
if ((value & 0x80000000) != 0)
    // Do other thing

You just have to make sure that you're only using one bit per flag. If you are, it's more complicated.

answered on Stack Overflow May 30, 2018 by Raceimaztion

User contributions licensed under CC BY-SA 3.0