None

Bitmasks in Java

January 6, 2010

If you need to store multiple boolean flags for something, you can do it using bits and storing that inside a single integer. The examples below use Java, but this is possible in most languages.

First, some constants:

public static final int FLAG_A = 1; // Binary 00001 public static final int FLAG_B = 2; // Binary 00010 public static final int FLAG_C = 4; // Binary 00100 public static final int FLAG_D = 8; // Binary 01000 

Setting A Flag

To set a flag, use the bitwise OR operator:

int lFlags = 0; lFlags = lFlags | FLAG_C; 

Checking A Flag

To test the value of a flag, use bitwise AND:

boolean lFlagCSet = false; if ((lFlags & FLAG_C) == FLAG_C) { lFlagCSet = true; } 

This can be simplified (and made slightly harder to read) as:

boolean lFlagCSet = ((lFlags & FLAG_C) == FLAG_C); 

Flipping Bits

To change the value of a flag (ie if it's set, unset it; if it's unset, set it) use the ~ operator:

lFlags = lFlags & ~FLAG_C; 

To flip all the bits:

lFlags = ~lFlags 

More Details

A Java int can hold 31 flags this way. The int is a 32-bit datatype, but the final bit is reserved for the plus/minus sign.

For more details see http://www.vipan.com/htdocs/bitwisehelp.html

Tags: java bitmask