program EvenOrOddBitsSetProgram;
function hasEvenOrOddBitsSet(n: Int32): Integer;
begin
(*
DWORD(n) Converts n to an unsigned 32-bit integer
PopCnt(...) Returns the number of set bits (1s) in the binary form of the value
Odd(...) Returns True if the number is odd, otherwise False
Ord(...) Converts the boolean result (True or False) to its ordinal value:
Ord(True) = 1, Ord(False) = 0
*)
hasEvenOrOddBitsSet := Ord(Odd(PopCnt(DWORD(n))));
end;
var
i: Int32;
begin
i := 42; // 0010 1010
writeln('0 = even number of bits set');
writeln('1 = odd number of bits set');
writeln('result = ', hasEvenOrOddBitsSet(i));
end.
(*
run:
0 = even number of bits set
1 = odd number of bits set
result = 1
*)