力扣刷题——190. 颠倒二进制位
190. 颠倒二进制位
位运算
我的思路是用类似写191. 位1的个数的方法,也是用循环记录,只不过是从左边开始,利用记录生成颠倒后的数,但是方法貌似有点笨。
看完提示恍然大悟,可以从右边开始循环记录,记录完右移再记录即可
public class Solution {
// you need treat n as an unsigned value
public int reverseBits(int n) {
int ans = 0;
for (int i = 0; i < 32; ++i) {
ans <<= 1;//先左移,若加完1再左移会错
if ((n & 1) != 0) {
ans += 1;
}
n >>>= 1;//因为是无符号的,所以使用逻辑右移动
//另外的方法是不用加的形式,用或来增加1
//ans = (ans << 1) | (n & 1);
//n >>>= 1;
}
return ans;
}
}
posted on 2023-02-22 22:06 pumpkinsBig 阅读(23) 评论(0) 收藏 举报
浙公网安备 33010602011771号