program FirstSetBitPosition;
// Function to find the position of the first set bit
function FindFirstSetBitPosition(num: Integer): Integer;
begin
{ Edge case: If the number is 0, there are no set bits }
if num = 0 then
FindFirstSetBitPosition := 0 { Return 0 to indicate no set bit }
else
(*
num AND -num isolates the lowest set bit.
Ln(...) / Ln(2) gives the zero-based index of that bit.
*)
FindFirstSetBitPosition := Trunc(Ln(num AND (-num)) / Ln(2)) + 1;
end;
var
num: Integer;
position: Integer;
begin
num := 4224; { Binary: 0001 0000 1000 0000 }
// Find and display the position of the first set bit
position := FindFirstSetBitPosition(num);
if position = 0 then
writeln('The number has no set bits (it''s 0).')
else
writeln('The position of the first set bit is: ', position);
end.
(*
run:
The position of the first set bit is: 7
*)