Einzelnen Beitrag anzeigen

calibra301

Registriert seit: 20. Mär 2009
95 Beiträge
 
Delphi XE8 Professional
 
#10

AW: Index vom x-tem gesetztem Bit

  Alt 2. Jun 2020, 18:28
Danke !
Das Brett vorm Kopf ist weg.

Meine Formulierung war aber wohl auch etwas unverständlich. Der Hintergrund ist
schwer zu erklären.
Beispiel: 42 = Binär 00101010, suche das fünfte gesetzte Bit von rechts.
Sind ja nur 3 Bit gesetzt also vorne wieder anfangen.
Ergebnis wäre dann 8

Delphi-Quellcode:
Function Bitmask(Value: Word; Position: Integer; FromLeft: Boolean = true): Byte;
var i,len: Integer;
     mask: Byte;
    Bitcounter:byte;
begin
  result:= 0;
  Bitcounter:=0;
  len:= (sizeof(value) * 8); // Anzahl der Bits
  If FromLeft Then Position:= (len - position) + 1;
  while Bitcounter<>Position do
  Begin
    for i:= 0 to len - 1 do
    begin
      mask:= (1 shl i);
      If value and mask <> 0 Then Bitcounter:=Bitcounter+1;
      if Bitcounter=Position then
      Begin
       result:=Mask;
       break;
      end;
    end;
  End;

end;


procedure TForm1.Button1Click(Sender: TObject);
var
  mask: Byte;
begin
  mask := Bitmask(42,5,false);
  Showmessage('Das '+inttostr(5)+'. Bit ist an Stelle ' + inttostr(mask)); // zeigt "Bitmask = 32"
end;
Das war so einer Dieser Tage wo man die Kiste einfach hätte abstellen sollen...

Noch mal Danke !
Calli
  Mit Zitat antworten Zitat