C++ 학습/C++ 코딩인터뷰[4장]

[4. 기본자료형] 4.2 비트 스왑

msugi 2024. 12. 19. 13:42


Q 4.2 비트 스왑

64비트 정수가 주어졌을 때 i번째 비트와 j번째 비트를 스왑하는 코드를 작성하라.
ex) 8비트 예시 01001001 => 00001011


간단한 방법은 temp에 i번째 비트와 j번째 비트를 저장해 비트마스크와 비트연산을 통해
서로의 값을 바꾸는 것이다.
그러나 비트당 두가지값(0,1)을 표현할 수 있다는 점을 이용해 더 빠르게 수행할 수 있다.
서로 비트가 다르다면 xor 연산으로 뒤집어 버리면 된다.
코드와 코딩결과는 다음과 같다.

시간 복잡도 O(1)