Dans cet article, nous discuterons de la solution de code pour échanger chaque bit alterné dans un nombre donné et renvoyer le nombre résultant. Nous allons résoudre ce problème en utilisant le concept d'opérations sur les bits pour résoudre le problème en temps constant sans utiliser de boucles.
Énoncé du problème - On nous donne un nombre n, nous devons échanger la paire de bits adjacents les uns aux autres.
En d’autres termes, nous devons échanger chaque bit placé impair avec son bit adjacent placé pair.
Contrainte : lors de la résolution du problème, nous devons garder à l'esprit que nous ne pouvons pas utiliser de boucle pour ce problème, nous devons exécuter notre code en complexité temporelle O(1) uniquement.
Entrée − n = 10011110
Sortie - Après avoir échangé les bits pairs et les bits impairs,
le nombre binaire obtenu est : 01101101
Entrée − n = 10011110
Sortie - Après avoir échangé les bits pairs et les bits impairs,
le nombre binaire obtenu est : 01101101
Explication −
Considérons l'exemple précédent pour une meilleure compréhension.
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
Pour le résultat, nous voulons que les bits de position paire soient en position impaire et vice-versa
Pour les bits de position paire en position impaire,
Nous devons décaler vers la droite la position paire d'une position.
Donc, pour les bits dans des positions paires, nous changeons simplement E > 1 pour obtenir la position souhaitée.
De même, nous devons décaler à gauche les bits de position impaire d'une position pour obtenir la position souhaitée des bits impairs.
Donc, pour le nombre impair de bits, il suffit de changer O << 1 pour obtenir la position souhaitée.
Maintenant, le problème suivant consiste à extraire les bits de position paire et impaire.
Comme nous le savons,
0x55 = 01010101 in which every only odd position bits are set ( non 0 ). 0xAA = 10101010 in position bits are set. which, only odd
Donc pour extraire E de n, il suffit de réaliser
E = n & 0xAA
De même, pour extraire O de n, nous devons effectuer-
O = n & 0x55
Maintenant, pour trouver la sortie échangée,
Les étapes impliquées sont-
E>>1
O <<1
Maintenant, nous combinons E et O en utilisant ou en opération.
Par conséquent, notre résultat sera – Résultat = ( E >> 1 | O << 1 )
Le code de cette méthode est le suivant :
#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 }
After swapping the even position bits with off position bits, the binary number obtained is 13
Complexité temporelle - La complexité temporelle de cette méthode est O(1).
Complexité spatiale - Nous n'utilisons aucun espace supplémentaire. La complexité de l'espace auxiliaire est O(1).
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!