力扣颠倒二进制位

haimian
2024-11-06 / 0 评论 / 4 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2024年11月06日,已超过164天没有更新,若内容或图片失效,请留言反馈。

这个是利用的进制的转换实现的
首先我们要知道,如果一个二进制往左移动一位的话 那么相当于扩大了二倍,比如说二进制的1代表1.如果往左移动一位的话,就是10,那么这个二进制是2,相当于1 * 2.同样的道理,接着移动一位的话就是100,这个二进制是4。
那么接下来的题目就很好完成了,
颠倒给定的 32 位无符号整数的二进制位。

uint32_t reverseBits(uint32_t n) {
    uint32_t result = 0;
    for(int i = 0;i < 32;i++){
        result = (result << 1) +(n >> i & 1);
        } 
    return result;

}

解释一下,首先就是定位了一个32位的result,初始化为0,接下来进行一个for循环。
首先就是还是上面的案例,比如输入的是101,那么我们刚开始result是0,然后n向左移动一位是1,相当于1 + 0,接下来是result是1 但是此时的result需要向左移动一位也就是变成了10,接下来加上n的第二位,是0,和1进行异或运算,结果是0,那么10 + 0是10接下来同样的道理,可以很轻松的得到正确的答案。

m361ccul.png

0

评论 (0)

取消