본문 바로가기
C++ 학습/C++ 코딩인터뷰[4장]

[4. 기본자료형] 4.3 비트 뒤집기

by msugi 2024. 12. 26.


Q 4.3 비트 뒤집기

64비트 숫자가 주어졌을 때 이를 역순으로 재구성한 숫자를 반환하는 코드를 작성하시오.
ex) 16비트 예시 1110 0000 0000 0001 -> 1000 000 000 0111 


한번만 연산을 한다면 4.2 비트스왑과 같은 방법으로 최하위 32비트와 최상위 32비트를 스왑하면 된다.
그러나 해당 연산을 반복적으로 한다면, 조금 더 효율적인 방법을 생각해 볼 수 있다.

64비트를 4개로 나누어 16비트가 4개 있다고 생각하자. 이를 각각 y3, y2, y1, y0 에 역순으로 저장해 룩업테이블을 만든다.
이를 다시 y0, y1, y2, y3순서로 출력하면 된다.


코드와 코딩결과는 다음과 같다.

시간복잡도 O(n/L)
bitset라이브러리를 Q4에 추가
73 -> 0100 1001
결과