Home > Backend Development > C++ > swap every two bits in every two bytes

swap every two bits in every two bytes

WBOY
Release: 2023-09-11 23:01:02
forward
1415 people have browsed it

swap every two bits in every two bytes

In this article, we will discuss the code solution to swap every alternating bit in a given number and return the resulting number. We will solve this problem using the concept of bit operations to solve the problem in constant time without using any loops.

Problem statement − We are given a number n, we have to swap the pair of bits that are adjacent to each other.

In other words, we have to swap every odd placed bit with its adjacent even placed bit.

Constrain: While solving the problem, we have to keep In mind that we cannot use a loop for this problem, we have to execute our code in O(1) time complexity only.

Example

Input − n = 10011110

Output - After swapping the even bits and the odd bits,

the binary number obtained is: 01101101

Input − n = 10011110

Output - After swapping the even bits and the odd bits,

the binary number obtained is: 01101101

Explanation

Let us consider the previous example for better understanding.

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
Copy after login

For the result, we want the even position bits at the odd position and vice-versa

For even position bits at odd position,

We need to right shift the even position by one position.

So, for bits in even positions, we just change E >> 1 to get the desired position.

Similarly, we have to left shift the odd position bits by one position to get the desired position of odd bits.

So, for the odd number of bits, we just need to change O << 1 to get the desired position.

Now the next problem is to extract the odd and even position bits.

as we know,

0x55 = 01010101 in which every only odd position bits are set ( non 0 ).
0xAA = 10101010 in position bits are set. which, only odd
Copy after login

Hence to extract E from n, we just need to perform

E = n & 0xAA
Copy after login

Similarly, to extract O from n, we need to perform-

O = n & 0x55
Copy after login

Now, to find the swapped output,

step

The steps involved are-

  • E >> 1

  • O << 1

  • Now, we combine E and O using or operation.

  • Hence our result will be – Result = ( E >> 1 | O << 1 )

The Chinese translation of

Example

is:

Example

The code for this method is as follows:

#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
}
Copy after login

Output

After swapping the even position bits with off position bits, the binary number obtained is 13
Copy after login

Time complexity - The time complexity of this method is O(1).

Space Complexity - We are not using any extra space. The auxiliary space complexity is O(1).

The above is the detailed content of swap every two bits in every two bytes. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:tutorialspoint.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template