이론 공부
비트마스크로 특정 비트 키고 끄거나 반대로 하는 법
옥식
2021. 12. 28. 17:43
참고
https://dojang.io/mod/page/view.php?id=184
C 언어 코딩 도장: 24.4 비트 연산자로 플래그 처리하기
플래그(flag)는 깃발에서 유래한 용어입니다. 보통 깃발을 위로 올리면 on, 아래로 내리면 off을 뜻하죠. 이걸 정수의 비트에 활용하는 건데 비트가 1이면 on, 0이면 off를 나타냅니다. 다음과 같이 8
dojang.io
비트가 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 <stdio.h>
int main(void)
{
unsigned char x = 75;
//1
printf("%u\n", x >> 4 & 1); //5번째 자리
//2
x = 75;
x |= 32; //0001 0000(2)
printf("%u\n", x);
//3
x = 75;
x &= ~4; //0000 0100(2)
printf("%u\n", x);
//4
x = 75;
x ^= 2; //0000 0010(2)
printf("%u\n", x);
return 0;
}
이다.