For example, given input 43261596 (represented in binary as 00000010100101000001111010011100), return 964176192 (represented in binary as 00111001011110000010100101000000).
分析
又一道位操作的题目。位操作总是显得比较像奇技淫巧,所以,先写一个常规版本,再搜索学习一下咯~
解决方案1(C++)
这个算是最常规的版本的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
classSolution { public: uint32_treverseBits(uint32_t n){ uint32_t result = 0; uint32_t num[32]; for(int i = 0; i < 32; i++) { num[i] = (n>>i) & 1; } uint32_t temp = 1; for(int i = 31; i >= 0; i--) { result += num[i]*temp; temp = temp<<1; } return result; } };
当然这段代码可以优化,取得最末位的数后,直接移到最高位
1 2 3 4 5 6 7 8 9 10
classSolution { public: uint32_treverseBits(uint32_t n){ uint32_t result = 0; for(int i = 0; i < 32; i++) { result += ((n>>i)&1)<<(31-i); } return result; } };