LeetCode190. 顛倒二進位制位
阿新 • • 發佈:2020-08-04
顛倒一個32位無符號整數的二進位制位,因為它只有32位,所以我們可以用一個迴圈,從最低位開始獲取它的當前位的數字,然後迴圈32次把數字加到一個新的32位無符號整數上,然後返回這個32位無符號整數就ok。
對於數字n,要獲取最低位的數字就是 n & 1,也可以理解為n >> 0 & 1,意思就是n的二進位制表示右移0位(不右移)與1做與運算,因為這個運算是右對齊的,所以只有最低位的數與1做了與運算,和1相與,這個位的數本來是0就是0,本來是1就是1,其他位同理,比如如果要獲得第30位(從右往左數第31個位,因為最低位從0開始),就是n >> 30 & i,其他位數同理。
class Solution {
public:
uint32_t reverseBits(uint32_t n) {
uint32_t res = 0;
for(int i = 0; i < 32; ++i) {
res = (res << 1) + (n >> i & 1); //之前的res左移一位,相當於乘2,再加上這個新的數
}
return res;
}
};