program BitSetDemo;
const
BIT_SIZE = 16;
type
TBitSet = Word;
// Print binary representation of the bitset
procedure PrintBinary(bits: TBitSet);
var
i: Integer;
begin
for i := BIT_SIZE - 1 downto 0 do
if (bits and (1 shl i)) <> 0 then
Write('1')
else
Write('0');
Writeln;
end;
function FindFirstSetBit(bits: TBitSet): Integer;
var
i: Integer;
begin
for i := 0 to BIT_SIZE - 1 do
if (bits and (1 shl i)) <> 0 then
begin
FindFirstSetBit := i;
Exit;
end;
FindFirstSetBit := -1;
end;
procedure PrintSetBitIndexes(bits: TBitSet);
var
i: Integer;
begin
for i := 0 to BIT_SIZE - 1 do
if (bits and (1 shl i)) <> 0 then
Write(i, ' ');
Writeln;
end;
var
bits: TBitSet;
first: Integer;
begin
bits := 0;
bits := bits or (1 shl 3);
bits := bits or (1 shl 5);
bits := bits or (1 shl 11);
bits := bits or (1 shl 14);
PrintBinary(bits);
first := FindFirstSetBit(bits);
Writeln('First set bit at index: ', first);
Writeln('All the set bits indexes:');
PrintSetBitIndexes(bits);
end.
(*
run:
0100100000101000
First set bit at index: 3
All the set bits indexes:
3 5 11 14
*)