Thema: Delphi IsPowerOfTwo

Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#15

Re: IsPowerOfTwo

  Alt 16. Aug 2009, 09:44
Davon abgesehen ist in meinem originalem Code der Parameter "Value" mit Absicht als Cardinal deklariert. Der kann garnicht < 0 werden, mal abgesehen davon das ältere Delphi Versionen den vorzeichenlosen Cardinal als vorzeichenbehafteten Integer interpretierten.

Wenn du ASM benutzen möchtest dann so

Delphi-Quellcode:
function IsPowerOfTwo(Value: Cardinal): Boolean; assembler;
asm
     LEA EDX, EAX -1
     AND EAX, EDX
     SETZ AL
end;
Diese Funktion dürfte die am schnellsten ausführbare auf heutigen Intel CPUs sein, also auch Branch frei. Allerdings wird der Wert 0 auch als Potenz von 2 betrachtet.

Deine BSF/BSR Opcodes sind "arsch langsam"

Gruß Hagen
  Mit Zitat antworten Zitat