1. 程式人生 > 實用技巧 >LeetCode190. 顛倒二進位制位

LeetCode190. 顛倒二進位制位

顛倒一個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;
    }
};