Reversing bits of a number

What is the efficient way to reverse bits of a number?

what is the actual question?

One of the most efficient way to reverse bits of a number is Xoring.

Suppose you have a 8 bit number 11010001. You want to reverse the bits. What is done is that you take xor of the number with 11111111. The result is 00101110. Internal implementation of xoring is very efficient with operation consuming only a single clock cycle.

I hope you see how things work out in above example. Similarly, if you have a 32 bit integer, you take xor of the integer with a number whose hex equivalent is FFFF.

Note: Reversing bits of a signed number reverses it sign.

2 Likes

Reverse a 32 bit integer

Yes by Xoring individual bits you get the bits reversed no doubt.

Also there’s a container in cpp called ‘BITSET’ which provides some methods for bit operations, you can follow it here.

The inbuilt method that we need here is ‘flip’ here, which takes a bitset and flip all of it’s bits, you can follow the method here.
Also there are even methods to output the contents of a bitset to string or ull etc.

I hope this helps ! :smiley:

1 Like

Do you mean flip bits, or reverse order of bits?

Reverse a 32 bit given number.

00000000000000000000000000000001 =1
10000000000000000000000000000000 =2147483648

Store the required string in the bitset, flip bits, output using the method to_ulong() and you will have desired result :smiley: here

Refer all the links and you will get it, if not feel free to ask for code !

If you want to reverse the bits of 32 bit integer just subtract that number from this 4294967295.

If you want to reverse the bits of x then do this x=4294967295-x.Now bits in x will be flipped.

4294967295=2^0+2^1+2^2…+2^31

If you want to reverse the bits of a 64 bit integer then you need to subtract that from 2^0+2^1+…+2^63

1 Like

pseducode.

Okay, working on it

Okay i was misunderstanding your question, here’s the output you desire:

#include "bits/stdc++.h"

using namespace std;

int main(){   
    string ip = "00000000000000000000000000000001";  
    reverse(ip.begin(),ip.end());  
    std::bitset<32> foo (ip);  
    cout << foo.to_string() << endl;  
    cout <<  foo.to_ulong();  
 
    return 0;
}
1 Like

@rashedcs copy this code and try experimenting on your local ide

Fixed the format :).

1 Like

Bro !! :slight_smile:

I misunderstood it for flip, it’s reverse bits infact

Flipping of sign is something people forget and tend to waste hours debugging the code. Its really nice to see some so conceptually aware.

Follow it in the below ans by me

I misunderstood for flipping at first too, but he wants reversing of bits like a string reverse.

2 Likes