就像是:
function BitScanForward(var BB:Int64):Integer; var i : integer; work:int64; begin Work:=bb; i:=0; while (i<64) and ((bb and 1)=0) do begin inc(i); bb:=bb shr 1; end; result:=i; end;
BitscanBackward是相同的,但测试最高位。可能是最好的未签名,但我无法测试,所以我把它作为练习留给读者。可能第64位在上述版本中也很危险,在这种情况下使“工作”uint64。
function BitScanForward(var BB:Int64):Integer; var i : integer; work:int64; begin Work:=bb; result:=0; for i:=0 to 63 do begin if (bb and 1)=1 then inc(result); bb:=bb shr 1; end; end;