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

échanger tous les deux bits tous les deux octets

WBOY
WBOYavant
2023-09-11 23:01:021368parcourir

é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

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

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,

Étapes

Les étapes impliquées sont-

  • E>>1

  • O

  • Maintenant, nous combinons E et O en utilisant ou en opération.

  • Par conséquent, notre résultat sera – Résultat = ( E >> 1 | O

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
}

Sortie

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer
Article précédent:En C++, le théorème de MidyArticle suivant:En C++, le théorème de Midy