The PopCount functions do exactly that.

On 03/05/2016 07:03 PM, Bart wrote:
Hi,

Does FreePascal have a routine for counting bits?
So that e.g. BitCount(%1001100100001) gives 5 (number of bits that are 1)?

I came up with (extracted from IntToBin()):

function BitCount(N: Int64): Integer;
var
   Q: QWord;
   i: Integer;
begin
   Result := 0;
   Q := QWord(N);
   for i := 0 to (8 * SizeOf(N) - 1) do
   begin
     if ((Q and 1) = 1) then Inc(Result);
     Q := Q shr 1;
   end;
end;

Surely this can be done better?

Bart
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal


_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to