옥수수와 식빵 그리고 코딩

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

이론 공부

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

옥식 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;
}

이다.

 

 

'이론 공부' 카테고리의 다른 글

이차원 배열 포인터  (0) 2022.01.08
signed, unsigned  (0) 2021.12.27
c언어 형식지정자  (0) 2021.12.27
//= (ex) x //= r)  (0) 2021.12.27
연산자 우선순위 C  (0) 2021.12.25
Comments