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;
}
};
本文介绍了两种实用的位操作技巧:一是反转一个32位无符号整数的位;二是计算一个32位无符号整数中1的个数(汉明重量)。通过具体的C++代码实现展示了如何高效地完成这两种操作。
154

被折叠的 条评论
为什么被折叠?



