https://leetcode.com/problems/reverse-bits/

Reverse bits of a given 32 bits unsigned integer.

For example, given input 43261596 (represented in binary as **00000010100101000001111010011100**), return 964176192 (represented in binary as**00111001011110000010100101000000**).

**Follow up**:

If this function is called many times, how would you optimize it?

**This question is much related with Number of 1 Bits**

Solution 1:

class Solution { public: uint32_t reverseBits(uint32_t n) { uint32_t i; uint32_t value = 0; for (i = 0; i < 32; ++i) { uint32_t tmp = (uint32_t)(n & ((uint32_t)1 << (31 - i))) ? 1 : 0; value |= tmp << i; } return value; } };

Solution 2:

uint32_t reverse(uint32_t x) { x = ((x >> 1) & 0x55555555u) | ((x & 0x55555555u) << 1); x = ((x >> 2) & 0x33333333u) | ((x & 0x33333333u) << 2); x = ((x >> 4) & 0x0f0f0f0fu) | ((x & 0x0f0f0f0fu) << 4); x = ((x >> 8) & 0x00ff00ffu) | ((x & 0x00ff00ffu) << 8); x = ((x >> 16) & 0xffffu) | ((x & 0xffffu) << 16); return x; }