图1:
图2:
n>>k & 1
这里的k
是从0
开始, 表示第0位是几 n >> 0 & 1
位运算模板 (我之前写的)
算法
(位运算) $O(1)$
使用位运算 n >> i & 1
可以取出 n
的第 i
位二进制数。
我们从小到大依次取出 n
的所有二进制位,然后逆序累加到另一个无符号整数中。
时间复杂度分析:C++中所有位运算的计算量都是1
,比如 n >> 10
,将 n
右移10位,计算量是1而不是10。所以在该问题中,我们总共进行了 4 * 32
次运算,所以时间复杂度是 $O(1)$
class Solution {
public:
uint32_t reverseBits(uint32_t n) {
uint32_t res = 0;
for (int i = 0; i < 32; i ++) { //正序输出则是for (int i = 31; i >= 0; i --)
//因为这里要逆序输出,所以最高是0,从0开始,开始先右移0位,找原数的第0位是几
res = res * 2 + (n >> i & 1);
}
return res;
}
};