Wie bekomme ich eine Nummer von der unsignierten langen langen Maske?

8

Ich frage mich, wie man etwas wie dies rückgängig machen kann. Also mit einem mask wo auto mask = 1ULL << 20; Wie bekomme ich 20 aus der Maske?

    
myWallJSON 22.04.2013, 06:09
quelle

8 Antworten

11

Schleifenfrei

Vor vielen Jahren, als ich eine bitweise Arithmetik für eine Schach-Engine schrieb, fand ich eine schnelle Implementierung, die für Ihre Anforderung nützlich ist, sie ist ohne Schleifen. Diese Methode gibt die Position des ersten 1 -Bits von rechts nach links zurück (Least Significant Bit):

%Vor%

Ausgabe

%Vor%

Ich denke, ich hatte hier gefunden.

    
deepmax 22.04.2013 06:16
quelle
6

Verwenden von Protokoll:

%Vor%

oder Schleife und Verschiebung:

%Vor%     
perreal 22.04.2013 06:13
quelle
5

Wenn es eine 64-Bit-Maske ist, können Sie es modulo 67 berechnen und eine Tabellensuche durchführen.

Um zu sagen:

%Vor%     
tmyklebu 22.04.2013 06:49
quelle
1
%Vor%     
Roee Gavirel 22.04.2013 06:22
quelle
1

Option 1: iterieren

%Vor%

Option 2: Wiederhole mehrere Bits gleichzeitig:

%Vor%

Option 3: Konvertieren Sie die Maske in double oder float und extrahieren Sie den Exponenten.

%Vor%     
Aki Suihkonen 22.04.2013 06:16
quelle
1

Eine einfache Schleife ist ganz okay:

%Vor%     
Some programmer dude 22.04.2013 06:14
quelle
0

Wie wäre es mit einer TMP-Lösung:

%Vor%     
rohitsan 22.04.2013 06:45
quelle
-1

Sie können dies versuchen ..

%Vor%     
monish 22.04.2013 06:17
quelle

Tags und Links