Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Erstes gesetztes Bit finden (https://www.delphipraxis.net/154239-erstes-gesetztes-bit-finden.html)

messie 2. Sep 2010 11:51

Erstes gesetztes Bit finden
 
Moin,

ich bastle gerade an einer crc-Routine und stehe vor der Wand :oops:. Und zwar ist ja der Datenwert um die Ordnung des Generatorpolynoms zu verschieben. Vor dem xor muss dann noch das generatorpolynom so nach links geshiftet (erweitert) werden, dass die beiden ersten gesetzten bits "übereinander" stehen. Grafisch auf dem Zettel geht das gut :wink:

Gibt es da einen Kunstgriff, den ich nicht kenne oder muss ich das zu Fuß machen?

Grüße, Messie

Amateurprofi 2. Sep 2010 13:07

AW: Erstes gesetztes Bit finden
 
@messie:
Kannst du das mal etwas ausführlicher beschreiben, am besten mit einem Beispiel, dem man auch die verwendeten Datentypen entnehmen kann ?!

jfheins 2. Sep 2010 13:35

AW: Erstes gesetztes Bit finden
 
Um eine Zahl n binär zu speichern benötigst du Ceil(ld(n+1)) Bits. (Logarithmus zur Basis 2)

D.h. wenn man von rechts mit 0 anfängt zu zählen ist das höchste gesetzte Bit: Floor(ld(n+1))

himitsu 2. Sep 2010 14:12

AW: Erstes gesetztes Bit finden
 
ASM und Befehl BSR = Index des höchsten Bits

http://www.delphipraxis.net/133667-ispoweroftwo.html

messie 2. Sep 2010 14:15

AW: Erstes gesetztes Bit finden
 
Zitat:

Zitat von jfheins (Beitrag 1046990)
Um eine Zahl n binär zu speichern benötigst du Ceil(ld(n+1)) Bits. (Logarithmus zur Basis 2)

D.h. wenn man von rechts mit 0 anfängt zu zählen ist das höchste gesetzte Bit: Floor(ld(n+1))

:thumb:
genau so etwas habe ich gesucht, Danke!

Hätte sonst eine Schleife benutzt, aber da muss man vorher wissen, wie groß der Input ist.
Übrigens das ld, gibt es das im Delphi oder war das Deine eigene Routine? Habe ich nicht gefunden, statt dessen LogN(2,n) benutzt.

Mit Assembler habe ich keine Erfahrung, das wird aber den Kollegen interessieren, der die Prozessorseite bearbeitet.

Danke, Messie

himitsu 2. Sep 2010 14:22

AW: Erstes gesetztes Bit finden
 
OpenBit = Floor(ld(n+1))

http://www.delphipraxis.net/133667-i...tml#post910371

Robotiker 2. Sep 2010 14:24

AW: Erstes gesetztes Bit finden
 
Zitat:

Zitat von himitsu (Beitrag 1047002)
ASM und Befehl BSR = Index des höchsten Bits

Das ist zwar schnell, nagelt den Delphicode aber entgültig auf 32 Bit fest ...

Hier mal was portables, ist allerdings C:

http://www-graphics.stanford.edu/~seander/bithacks.html


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:42 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz