이진수 마지막 비트와 and연산

이한울·2019년 7월 16일
0

C++

목록 보기
5/5

마지막 비트 제거

and 연산자를 활용하면 이진수의 마지막 비트를제거할 수 있다.
10의 이진수 표현은 1010이다. 10에서 1을 뺀 9의 이진수 표현은 10의 마지막 비트를 뺀 1000이다.
따라서 10의 마지막 비트를제거하는 방법은 10에서 1을 뺀 값과 and 비트 연산을 해주면 된다.

num &=(num-1)

제거된 마지막 비트만 0으로 바뀌고 나머지 숫자는 그대로기 때문에 마지막 비트만 제거된 이진수를 얻을 수 있다.

마지막 비트 추출

마지막 비트를 추출하는 방법은 음수를 활용한다.정수의 음수 표현은 2의 보수를 활용하는데, 2의 보수는 특정수의 비트를 뒤집어 준 뒤 1을 더하면 된다. 이렇게 뒤집은 수를 원래 수와 더해주면 모든 자리의 자릿수가 올라가서 오버플로우가 발생하고 결국 첫 비트가 제거되어 0이 됨을 알 수 있다.
2의 보수 즉 원래 값의 음수값을 활용해 마지막 비트를 추출할 수 있다. 2의 보수는 뒤집힌 비트에서 1을 더한 값이므로 원래 값과 and연산을 하게되면 마지막 비트에 대해서만 값이 나오고 나머지는 모든 비트는 뒤집힌 값과 연산되므로 0이 된다.

pos &- pos

위 연산을 통해서 마지막 비트를 얻을 수 있다.

profile
Backend Engineer 이한울입니다

0개의 댓글