본문 바로가기

Programming/C/C++/MFC

[ETC] 최하위 비트 검출 방법

1. 개요

간단한 것이나 파일 시스템이나 파일 포맷 등을 분석하는 프로그램을 짜기위해서는 필요하기 때문에 간단하게 정리하고 넘어가도록 하자.


2. & 연산자를 활용한 비트 검출방법

일반적으로 1Byte == 8 Bit 라고 되어있는데 여기서 예를 들어 int 형의 데이터를 받았고 그 데이터의 최하위 bit가 0x01 인지검출하려면 어찌해야할까??

해결 방법은 아주 간단하다 비트 연산자 중에서 & 연산자를 활용하면 되며 아래 [pic. 1]의 코드를 보며 이를 확인해보자.


[pic. 1] 최하위 비트 검출


[pic. 1]은 int 형 변수 bitTest를 선언하고 10진수인 4를 할당한 후 이를 0x01 과 & 연산하여 원하는 비트를 검출한 것이다.

이러한 방식이 어떻게 성립되는지 알아보도록하자.

우선 10진수 4는 2진수로 00000100으로 표현할 수 있으며 16진수인 0x01은 00000001 이라고 표현할 수 있는데 이 둘을 & 연산하게 되면 


    00000100 (4)

&) 00000001 (1)

----------------

=   00000000 (0)

즉 0이 된다.


3. 응용

[pic. 1]에서 사용한 & 연산자를 응용하면 원하는 부분의 비트가 0인지 1인지에 대해 검사하는 것도 가능하다.

예를 들어 35의 최상위에서 3번째 비트가 0인지 1인지 확인해보며 이해를 돕도록 하겠다.


[pic. 2] & 연산자 응용


[pic. 2]를 살펴보면 우선 dTob 함수는 재귀를 활용하여 프로그래밍한 10진수의 2진 변환이다.

그리고 다음으로 main 함수를 살펴보면 testResult 변수에서 bitTest, 즉 35와 32를 & 연산하는 것을 확인할 수 있다.


    0010 0011 (35) 

&) 0010 0000 (32)

----------------

=  0010 0000  (32)


그 결과로 32가 출력되는데 이를 통해 3번째 bit가 1임을 알 수 있다.