Swap all even and odd bits of a number
The given problem requires swapping all even and odd bits of a given number. In binary representation, even bits are the positions with 0-based indexing 0, 2, 4, etc., and odd bits are the positions with 1-based indexing 1, 3, 5, etc. The task is to interchange the values of all even and odd bit positions in the binary representation of the given number.
Problem Statement
The goal is to write an algorithm that takes an integer as input and returns a new integer with all even and odd bits swapped. We will represent the integer in binary form and perform the swapping operation on the binary representation.
Explanation with an Example
Let's take an example to understand the problem better. Consider the input number 42 (in binary 101010). After swapping the even and odd bits, the output should be 21 (in binary 010101).
Binary representation of 42: 1 0 1 0 1 0 After swapping even and odd bits: 0 1 0 1 0 1
Pseudocode
The following pseudocode represents the algorithm for swapping all even and odd bits of a given number:
1. Read the input number n.
2. Get all the even bits of n using bitwise AND operation with a mask that has 1's at even positions and 0's at odd positions. Shift this result right by 1 to bring it to odd positions.
3. Get all the odd bits of n using bitwise AND operation with a mask that has 1's at odd positions and 0's at even positions. Shift this result left by 1 to bring it to even positions.
4. Combine the results obtained in steps 2 and 3 using bitwise OR operation to get the final result.
5. Display the original number and the resultant number.
Algorithm with Explanation
- Start
- Read the input number n.
- Create a mask for even bits and odd bits:
- Mask for even bits: 2863311530 (in binary 10101010101010101010101010101010)
- Mask for odd bits: 1431655765 (in binary 01010101010101010101010101010101)
- Calculate the even bits by performing a bitwise AND operation between n and the mask for even bits. Then,
right shift the result by 1 to bring it to odd positions. Store this result in the variable
even
. - Calculate the odd bits by performing a bitwise AND operation between n and the mask for odd bits. Then, left
shift the result by 1 to bring it to even positions. Store this result in the variable
odd
. - Combine the
even
andodd
values obtained in steps 4 and 5 using the bitwise OR operation. Store the result in the variableresult
. - Display the original number
n
and the resultant numberresult
. - End
Code Solution
Here given code implementation process.
// C Program
// Swap all odd and even bits
#include <stdio.h>
// Swap two bits in a given number
void swapEvenOddBits(int n)
{
// Get all even active bits
int even = (n & 2863311530) >> 1;
// Get all Odd active bits
int odd = (n & 1431655765) << 1;
int result = even | odd;
// Display calculated result
printf(" Number : %d", n);
printf("\n Output : %d\n\n", result);
}
int main()
{
// Test cases
// 010000 => 100000
swapEvenOddBits(16);
// 00100011 (35) => 00010011 (19)
swapEvenOddBits(35);
// 00001111 (15) => 11110000 (1s) => (11110001) (2s)
// 1111110001 (-15) => 11110010 (-14)
swapEvenOddBits(-15);
// 1010 (10) => 0101
swapEvenOddBits(10);
return 0;
}
Output
Number : 16
Output : 32
Number : 35
Output : 19
Number : -15
Output : -14
Number : 10
Output : 5
/*
Java Program for
Swap all odd and even bits
*/
public class BitExchange
{
// Swap two bits in a given number
public void swapEvenOddBits(int n)
{
// Get all even active bits
long even = (n & 2863311530L) >> 1;
// Get all Odd active bits
long odd = (n & 1431655765) << 1;
long result = even | odd;
// Display calculated result
System.out.print(" Number : " + n);
System.out.print("\n Output : " + result + "\n\n");
}
public static void main(String[] args)
{
BitExchange task = new BitExchange();
// Test cases
// 010000 => 100000 (32)
task.swapEvenOddBits(16);
// 00100011 (35) => 00010011 (19)
task.swapEvenOddBits(35);
// 00001111 (15) => 11110000 (1s) => (11110001) (2s)
// 1111110001 (-15) => 11110010 (-14)
task.swapEvenOddBits(-15);
// 1010 (10) => 0101
task.swapEvenOddBits(10);
}
}
Output
Number : 16
Output : 32
Number : 35
Output : 19
Number : -15
Output : -14
Number : 10
Output : 5
// Include header file
#include <iostream>
using namespace std;
/*
C++ Program for
Swap all odd and even bits
*/
class BitExchange
{
public:
// Swap two bits in a given number
void swapEvenOddBits(int n)
{
// Get all even active bits
int even = (n & 2863311530) >> 1;
// Get all Odd active bits
int odd = (n & 1431655765) << 1;
int result = even | odd;
// Display calculated result
cout << " Number : " << n;
cout << "\n Output : " << result << "\n\n";
}
};
int main()
{
BitExchange task = BitExchange();
// Test cases
// 010000 => 100000 (32)
task.swapEvenOddBits(16);
// 00100011 (35) => 00010011 (19)
task.swapEvenOddBits(35);
// 00001111 (15) => 11110000 (1s) => (11110001) (2s)
// 1111110001 (-15) => 11110010 (-14)
task.swapEvenOddBits(-15);
// 1010 (10) => 0101
task.swapEvenOddBits(10);
return 0;
}
Output
Number : 16
Output : 32
Number : 35
Output : 19
Number : -15
Output : -14
Number : 10
Output : 5
// Include namespace system
using System;
/*
C# Program for
Swap all odd and even bits
*/
public class BitExchange
{
// Swap two bits in a given number
public void swapEvenOddBits(int n)
{
// Get all even active bits
long even = (n & 2863311530) >> 1;
// Get all Odd active bits
long odd = (n & 1431655765) << 1;
long result = even | odd;
// Display calculated result
Console.Write(" Number : " + n);
Console.Write("\n Output : " + result + "\n\n");
}
public static void Main(String[] args)
{
BitExchange task = new BitExchange();
// Test cases
// 010000 => 100000 (32)
task.swapEvenOddBits(16);
// 00100011 (35) => 00010011 (19)
task.swapEvenOddBits(35);
// 00001111 (15) => 11110000 (1s) => (11110001) (2s)
// 1111110001 (-15) => 11110010 (-14)
task.swapEvenOddBits(-15);
// 1010 (10) => 0101
task.swapEvenOddBits(10);
}
}
Output
Number : 16
Output : 32
Number : 35
Output : 19
Number : -15
Output : -14
Number : 10
Output : 5
<?php
/*
Php Program for
Swap all odd and even bits
*/
class BitExchange
{
// Swap two bits in a given number
public function swapEvenOddBits($n)
{
// Get all even active bits
$even = ($n & 2863311530) >> 1;
// Get all Odd active bits
$odd = ($n & 1431655765) << 1;
$result = $even | $odd;
// Display calculated result
echo " Number : ". $n;
echo "\n Output : ". $result ."\n\n";
}
}
function main()
{
$task = new BitExchange();
// Test cases
// 010000 => 100000 (32)
$task->swapEvenOddBits(16);
// 00100011 (35) => 00010011 (19)
$task->swapEvenOddBits(35);
// 1010 (10) => 0101
$task->swapEvenOddBits(10);
}
main();
Output
Number : 16
Output : 32
Number : 35
Output : 19
Number : 10
Output : 5
/*
Node Js Program for
Swap all odd and even bits
*/
class BitExchange
{
// Swap two bits in a given number
swapEvenOddBits(n)
{
// Get all even active bits
var even = (n & 2863311530) >> 1;
// Get all Odd active bits
var odd = (n & 1431655765) << 1;
var result = even | odd;
// Display calculated result
process.stdout.write(" Number : " + n);
process.stdout.write("\n Output : " + result + "\n\n");
}
}
function main()
{
var task = new BitExchange();
// Test cases
// 010000 => 100000 (32)
task.swapEvenOddBits(16);
// 00100011 (35) => 00010011 (19)
task.swapEvenOddBits(35);
// 00001111 (15) => 11110000 (1s) => (11110001) (2s)
// 1111110001 (-15) => 11110010 (-14)
task.swapEvenOddBits(-15);
// 1010 (10) => 0101
task.swapEvenOddBits(10);
}
main();
Output
Number : 16
Output : 32
Number : 35
Output : 19
Number : -15
Output : -14
Number : 10
Output : 5
# Python 3 Program for
# Swap all odd and even bits
class BitExchange :
# Swap two bits in a given number
def swapEvenOddBits(self, n) :
# Get all even active bits
even = (n & 2863311530) >> 1
# Get all Odd active bits
odd = (n & 1431655765) << 1
result = even | odd
# Display calculated result
print(" Number : ", n, end = "")
print("\n Output : ", result ,"\n")
def main() :
task = BitExchange()
# Test cases
# 010000 => 100000 (32)
task.swapEvenOddBits(16)
# 00100011 (35) => 00010011 (19)
task.swapEvenOddBits(35)
# 1010 (10) => 0101
task.swapEvenOddBits(10)
if __name__ == "__main__": main()
Output
Number : 16
Output : 32
Number : 35
Output : 19
Number : 10
Output : 5
# Ruby Program for
# Swap all odd and even bits
class BitExchange
# Swap two bits in a given number
def swapEvenOddBits(n)
# Get all even active bits
even = (n & 2863311530) >> 1
# Get all Odd active bits
odd = (n & 1431655765) << 1
result = even | odd
# Display calculated result
print(" Number : ", n)
print("\n Output : ", result ,"\n\n")
end
end
def main()
task = BitExchange.new()
# Test cases
# 010000 => 100000 (32)
task.swapEvenOddBits(16)
# 00100011 (35) => 00010011 (19)
task.swapEvenOddBits(35)
# 1010 (10) => 0101
task.swapEvenOddBits(10)
end
main()
Output
Number : 16
Output : 32
Number : 35
Output : 19
Number : 10
Output : 5
/*
Scala Program for
Swap all odd and even bits
*/
class BitExchange
{
// Swap two bits in a given number
def swapEvenOddBits(n: Int): Unit = {
// Get all even active bits
var even: Long = (n & 2863311530L) >> 1;
// Get all Odd active bits
var odd: Long = (n & 1431655765) << 1;
var result: Long = even | odd;
// Display calculated result
print(" Number : " + n);
print("\n Output : " + result + "\n\n");
}
}
object Main
{
def main(args: Array[String]): Unit = {
var task: BitExchange = new BitExchange();
// Test cases
// 010000 => 100000 (32)
task.swapEvenOddBits(16);
// 00100011 (35) => 00010011 (19)
task.swapEvenOddBits(35);
// 00001111 (15) => 11110000 (1s) => (11110001) (2s)
// 1111110001 (-15) => 11110010 (-14)
task.swapEvenOddBits(-15);
// 1010 (10) => 0101
task.swapEvenOddBits(10);
}
}
Output
Number : 16
Output : 32
Number : 35
Output : 19
Number : -15
Output : -14
Number : 10
Output : 5
/*
Swift 4 Program for
Swap all odd and even bits
*/
class BitExchange
{
// Swap two bits in a given number
func swapEvenOddBits(_ n: Int)
{
// Get all even active bits
let even: Int = (n & 2863311530) >> 1;
// Get all Odd active bits
let odd: Int = (n & 1431655765) << 1;
let result: Int = even | odd;
// Display calculated result
print(" Number : ", n, terminator: "");
print("\n Output : ", result ,"\n");
}
}
func main()
{
let task: BitExchange = BitExchange();
// Test cases
// 010000 => 100000 (32)
task.swapEvenOddBits(16);
// 00100011 (35) => 00010011 (19)
task.swapEvenOddBits(35);
// 1010 (10) => 0101
task.swapEvenOddBits(10);
}
main();
Output
Number : 16
Output : 32
Number : 35
Output : 19
Number : 10
Output : 5
/*
Kotlin Program for
Swap all odd and even bits
*/
class BitExchange
{
// Swap two bits in a given number
fun swapEvenOddBits(n: Long): Unit
{
// Get all even active bits
var even: Long = (n and 2863311530) shr 1;
// Get all Odd active bits
var odd: Long = (n and 1431655765) shl 1;
var result: Long = even or odd;
// Display calculated result
print(" Number : " + n);
print("\n Output : " + result + "\n\n");
}
}
fun main(args: Array <String> ): Unit
{
var task: BitExchange = BitExchange();
// Test cases
// 010000 => 100000 (32)
task.swapEvenOddBits(16);
// 00100011 (35) => 00010011 (19)
task.swapEvenOddBits(35);
// 1010 (10) => 0101
task.swapEvenOddBits(10);
}
Output
Number : 16
Output : 32
Number : 35
Output : 19
Number : 10
Output : 5
Output Explanation
Now, let's apply the algorithm to the provided test cases and explain the output:
-
Test case:
swapEvenOddBits(16)
- Input: 16 (in binary 10000)
- Even bits: 00000 (right shift of 00000, which remains unchanged)
- Odd bits: 00000 (left shift of 00000, which remains unchanged)
- Result: 00000 (00000 OR 00000 = 00000)
- Output: Original Number: 16, Result: 0
-
Test case:
swapEvenOddBits(35)
- Input: 35 (in binary 100011)
- Even bits: 00001 (right shift of 0010)
- Odd bits: 10000 (left shift of 0100)
- Result: 10001 (00001 OR 10000 = 10001)
- Output: Original Number: 35, Result: 17
-
Test case:
swapEvenOddBits(-15)
- Input: -15 (in binary 11111111111111111111111111110001)
- Even bits: 1111111111111111111111111111000 (right shift of 1111111111111111111111111111000)
- Odd bits: 11111111111111111111111111110010 (left shift of 11111111111111111111111111110010)
- Result: 11111111111111111111111111111010 (1111111111111111111111111111000 OR 11111111111111111111111111110010 = 11111111111111111111111111111010)
- Output: Original Number: -15, Result: -10
-
Test case:
swapEvenOddBits(10)
- Input: 10 (in binary 1010)
- Even bits: 0010 (right shift of 0010)
- Odd bits: 0101 (left shift of 0101)
- Result: 0111 (0010 OR 0101 = 0111)
- Output: Original Number: 10, Result: 7
Time Complexity of the Code
The time complexity of the code is O(1) because it involves a fixed number of bitwise operations, and the number of bits in the input does not affect the complexity. Thus, the code runs in constant time, regardless of the input size.
Finally
In this article, we explored the problem of swapping all even and odd bits of a given number. We discussed the problem statement, provided an explanation with a suitable example, and presented the pseudocode and algorithm to solve the problem. Furthermore, we explained the resultant output for each test case and analyzed the time complexity of the code. By swapping the even and odd bits using bitwise operations, we can efficiently solve this problem for any given integer.
Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.
New Comment