[尝试删除此问题〜因为有人觉得请问如何将4行汇编移植到本机pascal上是不重要的...
类似:
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;