Heim > Backend-Entwicklung > C++ > Tauschen Sie alle zwei Bits alle zwei Bytes aus

Tauschen Sie alle zwei Bits alle zwei Bytes aus

WBOY
Freigeben: 2023-09-11 23:01:02
nach vorne
1417 Leute haben es durchsucht

Tauschen Sie alle zwei Bits alle zwei Bytes aus

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.

Beispiel

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
Nach dem Login kopieren

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
Nach dem Login kopieren

Um E aus n zu extrahieren, müssen wir also nur

ausführen
E = n & 0xAA
Nach dem Login kopieren

Ähnlich müssen wir Folgendes ausführen, um O aus n zu extrahieren:-

O = n & 0x55
Nach dem Login kopieren

Um nun die ausgetauschte Ausgabe zu finden,

Schritte

Die erforderlichen Schritte sind:

  • E >>

  • O << 1
  • Jetzt kombinieren wir E und O mit oder Operation.
  • Daher wird unser Ergebnis sein – Ergebnis = ( E >> 1 | O << 1 )
  • Die chinesische Übersetzung von
  • Beispiel
lautet:

Beispiel

Der Code für diese Methode lautet wie folgt:

#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
}
Nach dem Login kopieren

Ausgabe

After swapping the even position bits with off position bits, the binary number obtained is 13
Nach dem Login kopieren

Zeitkomplexität – Die Zeitkomplexität dieser Methode beträgt O(1).

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!

Verwandte Etiketten:
Quelle:tutorialspoint.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage