题目描述
颠倒给定的 32 位无符号整数的二进制位。
示例 1:
输入: 00000010100101000001111010011100
输出: 00111001011110000010100101000000
解释: 输入的二进制串 00000010100101000001111010011100 表示无符号整数 43261596,
因此返回 964176192,其二进制表示形式为 00111001011110000010100101000000。
解题思路
- 自己的笨比思路,写了个🍔方法,还写了个bug调了半天,我真是rz
class Solution {
public:
uint32_t reverseBits(uint32_t n) {
string s="";
while(n){
if(n%2==0){
s.push_back('0');
}else{
s.push_back('1');
}
n=n/2;
}
int len = s.size();
for(int i=len;i<32;i++){
s.push_back('0');
}
uint32_t res = 0;
uint32_t je = 1;
for(int i=s.size()-1;i>=0;i--){
if(i==s.size()-1){
if(s[i]=='0'){
;
}else{
res+=1;
}
}else{
je*=2;
if(s[i]=='1'){
res+=je;
}else{
;
}
}
}
return res;
}
};
- 好活
学习了位运算
class Solution {
public:
uint32_t reverseBits(uint32_t n) {
//位运算
//循环搬运n到ans
uint32_t ans = 0;
int i = 32;
while(i--)
{
ans<<=1;//ans左移一位,给n的最后一位挪个窝
ans+=n&1;//n和1与,取出n的最后一位,放在ans的最后一位
n>>=1;//n右移一位,把已经挪到ans中的最后一位释放掉
}
return ans;
}
};