Reverse bits of a given 32 bits unsigned integer.
Note:
If this function is called many times, how would you optimize it?
처음 생각한 것: 2진수를 그대로 리스트로 만들어서 reverse() 해주자
=> 안됨
학창시절에도 bit 연산은 제대로 배운적이 없으므로 머리를 쓸 수 없어 힘을 빌렸다.
class Solution:
def reverseBits(self, n: int) -> int:
ret, power = 0, 31
while n:
ret += (n & 1) << power
n = n >> 1
power -= 1
return ret
32 비트이므로
ret += (n & 1) << power
: n 과 1 을 &(AND) 연산한 비트를 왼쪽으로 power 번 이동
n = n >> 1
: n 을 오른쪽으로 1 번 이동
...
n 을 계속 오른쪽으로 밀다보면 1은 모두 사라지고 0 이 됨 => return ret
xx....^!^