LeetCode 190. 颠倒二进制位(无符号整数二进制位操作)

逐位操作

class Solution {
public:
    uint32_t reverseBits(uint32_t n) {
        uint32_t ans = 0;  //所有位初始化为0
        for(int i = 31;i >= 0 && n > 0;i--)  //遍历32个位,每次将n的最后一位按ans的位从前往后顺序赋值,并将n右移一位。为了节省时间,因为ans初始化所有位为0,当遍历到n剩余位全是0,即n==0时,不必再对ans进行赋值,故退出循环。
        {
            ans |= (n & 1) << i;  //(n&1)将只保留n的最后一位,然后将这一位左移到ans对应位上(用或操作)
            n >>= 1;  //将n最后一位删掉(n右移一位)
        }
        return ans;
    }
};

对每个32位无符号整数,最多进行32次位操作,时间复杂度O(1),空间复杂度O(1)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值