How to reverse the bits of a number in C++

2 Answers

0 votes
#include <iostream>
#include <bitset>
 
void print_bits(unsigned int n) { 
    std::bitset<32> bits(n);
    std::cout << bits << '\n';
}
 
unsigned int reverseBits(unsigned int num) {
    unsigned int total_bits = sizeof(num) * 8;
    unsigned int reversed_bits = 0;
 
    for (unsigned int i = 0; i < total_bits; i++) {
        if ((num & (1 << i))) {
            reversed_bits |= 1 << ((total_bits - 1) - i);
        }
    }
 
    return reversed_bits;
}
 
int main()
{
    unsigned int num = 42;
    print_bits(num);
    num = reverseBits(num);
    print_bits(num);
    std::cout << "\n";
     
    num = 19;
    print_bits(num);
    num = reverseBits(num);
    print_bits(num);
}
 
 
 
 
/*
run:
 
00000000000000000000000000101010
01010100000000000000000000000000
 
00000000000000000000000000010011
11001000000000000000000000000000
 
*/

 



answered Dec 13, 2023 by avibootz
edited Apr 4 by avibootz
0 votes
#include <iostream>
#include <bitset>
#include <cstdint>

constexpr uint32_t reverse_bits(uint32_t n) {
    uint32_t r = 0;
    for (int i = 0; i < 32; i++) {
        r = (r << 1) | (n & 1);
        n >>= 1;
    }
    
    return r;
}

int main() {
    uint32_t a = 19;
    uint32_t b = 3;

    uint32_t ra = reverse_bits(a);
    uint32_t rb = reverse_bits(b);

    std::cout << "Original 19:  " << std::bitset<32>(a) << "\n";
    std::cout << "Reversed 19:  " << std::bitset<32>(ra) << "\n\n";

    std::cout << "Original 3:   " << std::bitset<32>(b) << "\n";
    std::cout << "Reversed 3:   " << std::bitset<32>(rb) << "\n";
}


/*
run:

Original 19:  00000000000000000000000000010011
Reversed 19:  11001000000000000000000000000000

Original 3:   00000000000000000000000000000011
Reversed 3:   11000000000000000000000000000000

*/

 



answered Apr 4 by avibootz
...