题目描述
颠倒给定的 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;
}
};
本文介绍了一种颠倒32位无符号整数二进制位的方法,通过两种不同的实现思路,展示了如何使用字符串操作和位运算技巧来解决这一问题。其中,位运算方法更为高效,通过对给定整数进行循环搬运和按位操作,实现了二进制位的颠倒。
691

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



