Open In App

Javascript Program to Check if two numbers are bit rotations of each other or not

Last Updated : 23 Jul, 2025
Comments
Improve
Suggest changes
Like Article
Like
Report

Given two positive integers x and y (0 < x, y < 2^32), check if one integer is obtained by rotating bits of the other. 

Bit Rotation: A rotation (or circular shift) is an operation similar to a shift except that the bits that fall off at one end are put back to the other end.

Examples: 

Input : a = 8, b = 1
Output : yes
Explanation : Representation of a = 8 : 0000 0000 0000 0000 0000 0000 0000 1000 ,
Representation of b = 1 : 0000 0000 0000, 0000 0000 0000 0000 0001.
If we rotate a by 3 units right we get b, hence answer is yes.

Input : a = 122, b = 2147483678
Output : yes
Explanation :
Representation of a = 122  : 0000 0000 0000 0000 0000 0000 0111 1010,
Representation of b = 2147483678 : 1000 0000 0000 0000 0000 0000 0001 1110,
If we rotate a by 2 units right we get b, hence answer is yes.

Approach:

  • Since total bits in which x or y can be represented is 32 since x, y > 0 and x, y < 2^32. 
  • So we need to find all 32 possible rotations of x and compare them with y till x and y are not equal. 
  • To do this we use a temporary variable x64 with 64 bits, which is result of the concatenation of x to x ie. x64 has the first 32 bits the same as bits of x and the last 32 bits are also the same as bits of x64.
  • Then we keep on shifting x64 by 1 on the right side and compare the rightmost 32 bits of x64 with y. 
  • In this way, we'll be able to get all the possible bits combinations due to rotation.

Here is the implementation of the above algorithm.

JavaScript
// javascript program to check if two numbers are bit rotations 
// of each other.

// function to check if two numbers are equal 
// after bit rotation 
function isRotation(x, y) {

    // x64 has concatenation of x with itself. 
    let x64 = x | (x << 32);
    while (x64 >= y) {

        // comapring only last 32 bits 
        if (x64 == y) {
            return true;
        }

        // right shift by 1 unit 
        x64 >>= 1;
    }
    return false;
}

// driver code to test above function 
let x = 122;
let y = 2147483678;

if (isRotation(x, y) == false) {
    console.log("Yes");
} else {
    console.log("No");
}

Output
Yes

Complexity Analysis:

  • Time Complexity: O(log2n), where n is the given number
  • Auxiliary Space: O(1)

Please refer complete article on Check if two numbers are bit rotations of each other or not for more details!


Article Tags :

Similar Reads