Einzelnen Beitrag anzeigen

samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#18

AW: Index vom x-tem gesetztem Bit

  Alt 3. Jun 2020, 12:36
Sehr schöne Vorschläge . Bevor jetzt gleich die Lösung via Cloud-Computing kommt - back to the roots:

Delphi-Quellcode:
program Project5;

uses
  SysUtils;

function CheckBitAsm(const Value, BitNumber: Integer): Integer;
asm
  or Value,Value
  jz @exit
  cmp BitNumber,0
  jle @exit
  mov ecx,1
@loop:
  test Value, ecx
  jz @next
  dec BitNumber
  jz @ready
@next:
  rol ecx,1
  jmp @loop
@ready:
  mov eax, ecx
  ret
@exit:
  xor eax,eax
  ret
end;

begin
  try
// Test
    if CheckBitAsm(42, 3) = 32 then
      writeln('Test 3 - ok');
    if CheckBitAsm(42, 5) = 8 then
      writeln('Test 4 - ok');
    readln;
  except
    on E: Exception do
      writeln(E.ClassName, ': ', E.Message);
  end;
Natürlich nicht ernst gemeint!

Geändert von samso ( 3. Jun 2020 um 12:41 Uhr) Grund: BitNumber soll größer 0 sein
  Mit Zitat antworten Zitat