Schnelle Methode, um das niedrigste und das höchstwertige Bit in einer 64-Bit-Ganzzahl zu finden

8

Es gibt viele Fragen dazu auf StackOverflow. Viel . Ich kann jedoch keine Antwort finden:

  • Funktioniert in C #
  • Funktioniert für 64-Bit-Ganzzahlen (im Gegensatz zu 32-Bit)

Schneller als:

%Vor%

oder sogar

%Vor%

Ich nehme hier eine 64-Bit-Intel-CPU an.

Eine nützliche Referenz ist die Seite Bit Hacks und eine andere fxtbook.pdf Während diese jedoch eine nützliche Richtung geben, um das Problem anzugehen, geben sie keine fertige Antwort.

Ich bin hinter einer wiederverwendbaren Funktion, die etwas ähnlich wie _BitScanForward64 und _BitScanReverse64 nur für C #.

    
Andrew Savinykh 13.07.2015, 02:24
quelle

2 Antworten

5

Laut meinem Kommentar ist dies eine Funktion in C #, um führende Null-Bits zu zählen, die für eine 64-Bit-Ganzzahl modifiziert wurden.

%Vor%     
Taekahn 13.07.2015, 07:24
quelle
7

Einer der Wege, dies zu tun, der auf der Bit Hacks Seite in der Frage beschrieben wird, ist die De Bruijn Sequenz . Leider gibt diese Seite keine 64-Bit-Version dieser Sequenz. Diese nützliche Seite erläutert, wie De Bruijn-Sequenzen erstellt werden können und dieser gibt ein Beispiel für den in C ++ geschriebenen Sequenzgenerator. Wenn wir den gegebenen Code anpassen, können wir mehrere Sequenzen erzeugen, von denen eine im folgenden C # -Code angegeben ist:

%Vor%

Ich habe auch meinen C # -Port des Sequenzgenerators an github

geschickt

Ein weiterer Artikel, der in der Frage nicht erwähnt wird, mit einem anständigen Cover von De Bruijn Sequenzen, kann hier gefunden werden.

    
Andrew Savinykh 13.07.2015 02:24
quelle

Tags und Links