비트마스크로 특정 비트 키고 끄거나 반대로 하는 법

비트마스크로 특정 비트 키고 끄거나 반대로 하는 법

참고

https://dojang.io/mod/page/view.php?id=184

비트가 1이면 on, 0이면 off이다.

예를들어

0100 0001 // 2번째, 8번째 비트가 켜진(on)상태

1. 특정 비트를 켜는 방법

플래그 |= 마스크

*플래그: 비트를 바꿀 변수

*마스크: 바꿀 비트위치를 나타냄, 바꿀 위치를 2진수로 표현한 뒤 10진수로 바꾸어 적을 것!

이 때 마스크를 적을 때 바꾸고자 하는 비트가

왼쪽에서 5번째 비트 : 10000

왼쪽에서 3번째 비트 : 00100

이런 식으로 2진수로 생각 한 뒤 2진수를 10진수로 바꾸어 마스크에 적어주어야 한다.

왜냐하면 만약 자료형이 문자형이라면 크기가 2바이트로 총 8자리 비트를 가지기 때문에

왼쪽에서 5번째 비트를 바꿀 마스크를 0001 0000으로 적거나 10진수로 적거나...

근데 10진수로 적는게 속편하다!

2. 특정 비트를 끄는 방법

플래그 &= ~마스크

3. 특정 비트가 켜져 있다면 끄고, 꺼져 있다면 켜는 방법

플래그 ^= 마스크

예를들어

int 변수 x값이 75일 때

(1) 왼쪽에서 5번째 자리의 비트값

(2) 왼쪽에서 6번째 비트를 1로 지정한 값

(3) 왼쪽에서 3번째 비트를 0으로 지정한 값

(4) 왼쪽에서 2번째 비트를 반대로 한 값

을 구하려면

#include int main(void) { unsigned char x = 75; //1 printf("%u

", x >> 4 & 1); //5번째 자리 //2 x = 75; x |= 32; //0001 0000(2) printf("%u

", x); //3 x = 75; x &= ~4; //0000 0100(2) printf("%u

", x); //4 x = 75; x ^= 2; //0000 0010(2) printf("%u

", x); return 0; }

이다.

from http://corn-bread-and-coding.tistory.com/32 by ccl(A) rewrite - 2021-12-28 18:00:56