In diesem Artikel besprechen wir die Codelösung, um jedes alternierende Bit in einer bestimmten Zahl auszutauschen und die resultierende Zahl zurückzugeben. Wir werden dieses Problem mithilfe des Konzepts der Bitoperationen lösen, um das Problem in konstanter Zeit ohne Verwendung von Schleifen zu lösen.
Problemstellung – Wir erhalten eine Zahl n, wir müssen die Bitpaare, die nebeneinander liegen, vertauschen.
Mit anderen Worten, wir müssen jedes ungerade platzierte Bit mit dem angrenzenden gerade platzierten Bit austauschen.
Einschränkung: Bei der Lösung des Problems müssen wir bedenken, dass wir für dieses Problem keine Schleife verwenden können, sondern unseren Code nur in O(1)-Zeitkomplexität ausführen müssen.
Eingabe − n = 10011110
Ausgabe – Nach dem Austausch gerader und ungerader Bits,
Die erhaltene Binärzahl ist: 01101101
Eingabe − n = 10011110
Ausgabe – Nach dem Austausch gerader und ungerader Bits,
Die erhaltene Binärzahl ist: 01101101
Erklärung −
Betrachten wir zum besseren Verständnis das vorherige Beispiel.
n = 10011110 Even position bits in n are E – 1 x 0 x 1 x 1 x Odd position bits in n are O – x 0 x 1 x 1 x 0
Für das Ergebnis wollen wir die Bits mit gerader Position an der ungeraden Position und umgekehrt
Für Bits mit gerader Position an ungerader Position,
Wir müssen die gerade Position um eine Position nach rechts verschieben.
Für Bits in geraden Positionen ändern wir einfach E >> 1, um die gewünschte Position zu erhalten.
Ähnlich müssen wir die ungeraden Positionsbits um eine Position nach links verschieben, um die gewünschte Position der ungeraden Bits zu erhalten.
Für ungerade Bits müssen wir also nur O << ändern, um die gewünschte Position zu erhalten.
Das nächste Problem besteht nun darin, die ungeraden und geraden Positionsbits zu extrahieren.
Wie wir wissen,
0x55 = 01010101 in which every only odd position bits are set ( non 0 ). 0xAA = 10101010 in position bits are set. which, only odd
Um E aus n zu extrahieren, müssen wir also nur
ausführenE = n & 0xAA
Ähnlich müssen wir Folgendes ausführen, um O aus n zu extrahieren:-
O = n & 0x55
Um nun die ausgetauschte Ausgabe zu finden,
Die erforderlichen Schritte sind:
E >>
Die chinesische Übersetzung von
#include<bits/stdc++.h> using namespace std; unsigned int swapbits(unsigned int n) { unsigned int E = n & 0xAA ; unsigned int O = n & 0x55 ; unsigned int result = (E >> 1)|(O << 1); return result; } int main() { unsigned int n = 14; cout << "After swapping the even position bits with off position bits, the binary number obtained is " << swapbits(n) << endl; return 0; // code is contributed by Vaishnavi tripathi }
Ausgabe
After swapping the even position bits with off position bits, the binary number obtained is 13
Raumkomplexität – Wir nutzen keinen zusätzlichen Raum. Die Komplexität des Hilfsraums beträgt O(1).
Das obige ist der detaillierte Inhalt vonTauschen Sie alle zwei Bits alle zwei Bytes aus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!