I usually use this function:
// Check if the bit at ABitIndex position is 1 (true) or 0 (false)
function IsBitSet(const AValueToCheck, ABitIndex: Integer): Boolean;
begin
Result := AValueToCheck and (1 shl ABitIndex) <> 0;
end;
and the setters:
// set the bit at ABitIndex position to 1
function SetBit(const AValueToAlter, ABitIndex: Integer): Integer;
begin
Result := AValueToAlter or (1 shl ABitIndex);
end;
// set the bit at ABitIndex position to 0
function ResetBit(const AValueToAlter, ABitIndex: Integer): Integer;
begin
Result := AValueToAlter and (not (1 shl ABitIndex));
end;
Note there is no range checking, just for performance. But easy to add if u need to