Maison > développement back-end > C++ > échanger tous les deux bits tous les deux octets

échanger tous les deux bits tous les deux octets

WBOY
Libérer: 2023-09-11 23:01:02
avant
1419 Les gens l'ont consulté

échanger tous les deux bits tous les deux octets

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.

Exemple

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
Copier après la connexion

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
Copier après la connexion

Donc pour extraire E de n, il suffit de réaliser

E = n & 0xAA
Copier après la connexion

De même, pour extraire O de n, nous devons effectuer-

O = n & 0x55
Copier après la connexion

Maintenant, pour trouver la sortie échangée,

Étapes

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 )

La traduction chinoise de

Exemple

est :

Exemple

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
}
Copier après la connexion

Sortie

After swapping the even position bits with off position bits, the binary number obtained is 13
Copier après la connexion

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!

source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal