题目
颠倒给定的 32 位无符号整数的二进制位。
示例
输入: 43261596
输出: 964176192
解释: 43261596 的二进制表示形式为 00000010100101000001111010011100 ,返回 964176192,其二进制表示形式为 00111001011110000010100101000000 。
C++代码
方法1:
先将输入n转换为二进制,并逐位存储在vector中,由于始终在vector末尾添加元素,最后得到的vector已经是颠倒后的,但是考虑到是32位二进制位,所以不足32位的要继续在末尾添0.
class Solution {
public:
uint32_t reverseBits(uint32_t n)
{
vector<int> tmp;
uint32_t num = 0;
uint32_t i = n; //注意这里的i的数据类型
while (i)
{
int r = i % 2;
tmp.push_back(i % 2);
i /= 2;
}
int len = tmp.size();
for (; len < 32; len++)
tmp.push_back(0);
len = tmp.size();
for (vector<int> ::iterator iter = tmp.begin(); iter != tmp.end(); iter++)
{
num = num + *iter*pow(2, --len);
}
return num;
}
};
方法2:
采用位逻辑运算。
&:一个数&1,则是取其二进制的末位;
<<:a<<b,a的二进制左移b位;
将num初始化为0,然后将num左移一位,可以将n的二进制的最后一位取出,赋给num最后一位,然后将n右移一位,如此循环32次(因为为32位)
class Solution {
public:
uint32_t reverseBits(uint32_t n)
{
uint32_t num;
for(int i=0;i<32;i++)
{
num<<=1;
num+=(n&1);
n>>=1;
}
return num;
}
}
本文介绍了一种颠倒32位无符号整数二进制位的方法,通过两种不同的算法实现:一是利用vector存储并补充0位,二是采用位逻辑运算。示例展示了输入43261596如何转换为964176192。
790

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



