190. 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?
class Solution {
public:
uint32_t reverseBits(uint32_t n)
{
uint32_t ret = n;
for (int i = 0; i < 16; i ++)
{
int left = 31 - i, right = i;
if ((((n>>left) & 1) ^ ((n>>right) & 1)) == 0) //说明要换的那两个位置相同,不用互换
continue;
else
{
if (((n>>right) & 1) == 1) //低位是0,高位是1.然后交换为高位1,低位0
{
ret = ret & ~(1<<right); //设置低位为0
ret = ret | (1<<left); //设置高位为1
} else {
ret = ret & ~(1<<left); //设置高位为0
ret = ret | (1<<right); //设置低位为1
}
}
}
return ret;
}
};
191. Number of 1 Bits
Write a function that takes an unsigned integer and returns the number of ’1' bits it has (also known as the Hamming weight).
For example, the 32-bit integer ’11' has binary representation 00000000000000000000000000001011
, so the function should return 3.
class Solution {
public:
int hammingWeight(uint32_t n)
{
int ret = 0;
for (int i = 0; i < 32; i++)
ret += ( ((n>>i) & 1) == 1) ? 1 : 0;
return ret;
}
};