Mamy integer z 32 bity i teraz chcę z tego numer pierwszego bita z 1: 0, 1, 2, itd.
Jak to najszybciej załatwić, może jest jakiś jeden rozkaz w asm do tego?
Są takie raskazy: bs
Na piechotę od cholery czasu to zajmuje; jakoś tak to wygląda
function fbit(z : uint) : integer;
begin
i := 0;
if z = 0 then i := -1 // nie ma bitów
else while (z and 1) = 0 do begin
z := z shr 1; inc(i);
end;
fbit := i;
end;
O! Chyba znalazłem coś:
http://web.itu.edu.tr/kesgin/mul06/intel/instr/bsf.html
Aż 40 cykli na 486?
Przecież to nie jest skomplikowane... jak np. dzielenie!
Ciekawe ile cykli jest na nowszych procesorach.