这个是利用的进制的转换实现的
首先我们要知道,如果一个二进制往左移动一位的话 那么相当于扩大了二倍,比如说二进制的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接下来同样的道理,可以很轻松的得到正确的答案。
评论 (0)