方法 一:位运算
例:
假如n为四为数,循环四次,高位为0右移前端补0,为1右移前端补1,左移后端补0
n = 1010
res = 0000;
n = 1101;
res =0000;
n = 1110;
res = 0001;
n = 1111;
res = 0010;
n = 1111;
res = 0101;
class Solution {
public:
uint32_t reverseBits(uint32_t n) {
uint32_t res = 0;
for(int i = 0; i < 32; i++){//同过将参数的最后一个值加给res,res右移达到反转
res<<=1;//返回值向左移
res+=n&1;//每次取参数值最后一位加给res
n>>=1;//将参数值右移
}
return res;
}
};
方法二:bitset函数使用
class Solution {
public:
uint32_t reverseBits(uint32_t n) {
bitset<32> b=n;//将n存储在bitset中
for(int i=0;i<16;i++)//bitset类似数组可以实现交换,右n中只有0和1,所以如果前后交换值不等两个取反即可
{
if(b[i]!=b[31-i])
{
// b[i]=!b[i];
// b[31-i]=!b[31-i];
b.flip(i);
b.flip(31-i);
}
}
return b.to_ulong();//将bitset转换成unsigned long类型
}
};
方法三:使用
string反转函数
class Solution {
public:
uint32_t reverseBits(uint32_t n) {
string str = bitset<32>(n).to_string();//先构造bitset类,使用to_string函数转换为String类
reverse(str.begin(),str.end());//使用string反转函数
return bitset<32>(str).to_ulong();//在转换为bitset类,再转换为无符号长整形
}
};