C언어

고요한하늘 2015. 4. 21. 11:20

bit masking을 할 때

보통의 경우는 아래와 같이 처리한다.


<방법론 1>

비트 on시킬 때

mask |= bit;


비트 off 시킬 때

mask  &= ~bit



<방법론2>

mask ^= bit;

^ 라는 xor와 위 방법이 약간은 다른데 예를 들어서 설명하면


mask = 0000 0001 이고

설정할 값(A)이 0000 1110 이면

설정후에 0000 1111이 된다.


이 상태에서 A를 OFF 시키면

원래의 상태 0000 0001이 되도록 해야 한다.

이럴 경우 <방법론1>과 <방법론2>가 동일하게 처리되는데


A가 masking되지 않은 상태에서 unmasking시켰을 때 결과값이 달라진다.

<방법론1>은

A가 masking 되어 있던 안되어 있던  0000 00001이 되지만

<방법론2>는 A가 masking 되어 있지 않으면 0000 1111이 된다.


아래 URL을 참고하면

bit를 0으로 OFF 시킬때는 <방법론1>을 사용하고

bit를 on에서 OFF 또는 OFF에서 on으로 togging시킬때는

<방법론2>를 사용한다.


참고 : http://stackoverflow.com/questions/47981/how-do-you-set-clear-and-toggle-a-single-bit-in-c-c