Wie tausche ich die ersten 2 aufeinander folgenden verschiedenen Bits

8

Was wäre ein schneller und eleganter Weg, um die ersten (am wenigsten signifikanten) 2 aufeinander folgenden Bits in einer vorzeichenlosen Ganzzahl zu tauschen?

z. B.

%Vor%

Bisher bin ich auf folgendes gestoßen:

%Vor%

Meine größte Unzufriedenheit mit der obigen Lösung ist, dass sie die Anweisung if verwendet.

    
kaspersky 04.11.2015, 21:08
quelle

2 Antworten

4

So würde ich es machen:

%Vor%

Meine Lösung gibt 0 zurück, wenn Nummer == 0, während die Funktion der ursprünglichen Frage 1100000000000000000000000000000000000000000000000000000000000000000000 zurückgibt.

Einige Erklärungen: Die Bits von x enthalten 0, wenn das Bit an dieser Position gleich dem nächsten Bit ist, und 1, wenn es anders ist. (x & amp; -x) ist das niedrigstwertige Bit von x, das heißt, die erste Bitdifferenz.

    
Rémi 04.11.2015, 22:12
quelle
3

Dies ist die gleiche Idee, ohne ein if zu verwenden.

%Vor%

Die Variable t ist entweder 1 oder -1, abhängig von der lsb der Zahl.

Testen Sie es live

    
alain 04.11.2015 21:58
quelle

Tags und Links