
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Swap Every Two Bits in Bytes
In this article, we will discuss the code solution to swap every alternate bit in a given number and return the resultant number. We will use the concept of bit manipulation in order 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 position bits with off position bits,
the binary number obtained is: 01101101
Input ? n = 10011110
Output ? After swapping the even position bits with off position 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
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 even position bits, we just have to E >> 1 to get required position.
Similarly, we have to left shift the odd position bits by one position to get the desired position of odd bits.
So, for odd position bits, we just have to O << 1 to get required 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
Hence to extract E from n, we just need to perform
E = n & 0xAA
Similarly, to extract O from n, we need to perform-
O = n & 0x55
Now, to find the swapped output,
Steps
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 )
Example
Code representation for this approach is given below -
#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 }
Output
After swapping the even position bits with off position bits, the binary number obtained is 13
Time complexity ? The time complexity for this approach is O(1).
Space Complexity ? We have not used any additional space. The auxiliary space complexity is O(1).