I need to check if a certain flag is set for an integer.
I already know how to set a flag:
flags := FLAG_A or FLAG_B or FLAG_C
But how can I check if a certain flag is set?
In C++ I used the &
operator, but how does that work in Delphi? I'm a bit confused at the moment
Bit flags are one or more (up to 32) Boolean values stored in a single number variable. Each bit flag typically has a corresponding predefined constant associated with it; this constant has the bit for this flag set to 1 and all other bits set to 0.
To check a flag state, we use bitwise AND operator (&). It allows to determine if bit is on or off.
In Delphi you have 2 options:
1) use 'and' operator, like this:
const
FLAG_A = 1; // 1 shl 0
FLAG_B = 2; // 1 shl 1
FLAG_C = 4; // 1 shl 2
var
Flags: Integer;
[..]
Flags:= FLAG_A or FLAG_C;
if FLAG_A and Flags <> 0 then .. // check FLAG_A is set in flags variable
2) define set type:
type
TFlag = (FLAG_A, FLAG_B, FLAG_C);
TFlags = set of TFlag;
var
Flags: TFlags;
[..]
Flags:= [FLAG_A, FLAG_C];
if FLAG_A in Flags then .. // check FLAG_A is set in flags variable
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With