본문 바로가기

BackEnd/C

비트 마스크

반응형

1. 비트 마스크란?


비트의 열에다가 씌울 수 있는 마스크라는 의미로 볼 수 있는데,


비트 마스크를 활용하여 비트 열의 특정부분을 뽑아 내거나 변경 시킬 수 있다.


2. 비트 열의 일부 추출


3행은 마스크를 씌울 대상이다.


5~8행은 비스마스크이다. 이처럼 마스크라는 것도 비트의 열이다.


10~13행에서 비트의 열들을 4비트씩 뽑아 내었다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main(void)
{
    unsigned short data=0x5678;    /* 0101 0110 0111 1000 */
 
    unsigned short msk1=0xf000;    /* 1111 0000 0000 0000 */
    unsigned short msk2=0x0f00;    /* 0000 1111 0000 0000 */
    unsigned short msk3=0x00f0;    /* 0000 0000 1111 0000 */
    unsigned short msk4=0x000f;    /* 0000 0000 0000 1111 */
 
    printf("result1= %#.4x \n", data & msk1);
    printf("result2= %#.4x \n", data & msk2);
    printf("result3= %#.4x \n", data & msk3);
    printf("result4= %#.4x \n", data & msk4);
 
    return 0;
}
cs


1
2
3
4
result1= 0x5000
result2= 0x0600
result3= 0x0070
result4= 0x0008
cs


3. 비트 열의 변경


전부 0으로 채워져 있던 비트의 열을 앞의 4비트부터 시작해서 순차적으로 채워 나간다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int main(void)
{
    unsigned short data=0x0000;    /* 0000 0000 0000 0000 */
 
    unsigned short msk1=0xf000;    /* 1111 0000 0000 0000 */
    unsigned short msk2=0x0f00;    /* 0000 1111 0000 0000 */
    unsigned short msk3=0x00f0;    /* 0000 0000 1111 0000 */
    unsigned short msk4=0x000f;    /* 0000 0000 0000 1111 */
 
    data |= msk1;
    printf("result1= %#.4x \n", data);
 
    data |= msk2;
    printf("result2= %#.4x \n", data);
 
    data |= msk3;
    printf("result3= %#.4x \n", data);
 
    data |= msk4;
    printf("result4= %#.4x \n", data);
 
    return 0;
}
cs

1
2
3
4
result1= 0xf000
result2= 0xff00
result3= 0xfff0
result4= 0xffff
cs


반응형

'BackEnd > C' 카테고리의 다른 글

배열을 이용한 문자열의 표현  (0) 2019.03.10
1차원 배열의 이해와 활용  (0) 2019.03.09
비트 쉬프트(Shift) 연산자  (0) 2019.03.09
비트연산자  (0) 2019.03.08
.  (0) 2019.03.08