2016. 7. 6. 09:22ㆍC,C++
bit mask
mask off
특정 비트를 강제로 '0' 으로 만들거나, 유지 하는 연산 (reset)
ex) '0'과 &연산을 하는 경우 비트의 값은 무조건 '0' 이되고
'1'과 &연산을 하는 경우 원래 비트 값을 유지한다.
mask on
특정 비트를 강제로 '1'로 만들고 나머지는 유지하는 연산 (set)
ex) '1' 과 OR 연산을 하는 경우 모든 값을 '1' 로 만들고
'0' 과 OR 연산을 하는 경우 원래 비트 값을 유지한다.
특정 비트를 반전 한다.
ex) XOR 연산을 이용하여 '1'을 '0'으로, '0'을 '1'로 반전 시킬 수 있다.
- bit mask를 이용하여 데이터의 특정 부분을 얻을 수 있다.
ex)
unsigned char Data = 0x1234
unsigned char msk1 = 0xf000;
unsigned char msk2 = 0x0f00;
unsigned char msk3 = 0x00f0;
unsigned char msk4 = 0x000f;
printf(" result : %.4x",(Data & msk1) ); // result : 0x1000
printf(" result : %.4x",(Data & msk2) ); // result : 0x0200
printf(" result : %.4x",(Data & msk3) ); // result : 0x0030
printf(" result : %.4x",(Data & msk4) ); // result : 0x0004
- bit mask를 이용하여 데이터의 특정 부분을 변경 할 수 있다.
ex)
unsigned char Data = 0x0000
unsigned char msk1 = 0xf000;
unsigned char msk2 = 0x0f00;
unsigned char msk3 = 0x00f0;
unsigned char msk4 = 0x000f;
printf(" result : %.4x",(Data |= msk1) ); // result : 0xf000
printf(" result : %.4x",(Data |= msk2) ); // result : 0xff00
printf(" result : %.4x",(Data |= msk3) ); // result : 0xfff0
printf(" result : %.4x",(Data |= msk4) ); // result : 0xffff
-특정 bit를 반전 시키려면 1과 XOR 연산을 이용한다.
"<<" 연산자를 통해 데이터의 n번 비트를 조작 할 수 있다.
unsigned char Data=0xabcd;
ex_1)
Data |= (1<<10); // Data 의 10번 bit를 1로 조작, Data = 0xafcd ( 1010 1011 1100 1101 -> 1010 1111 1100 1101 )
ex_2)
Data &= (0<<8); // Data 의 8번 bit를 0으로 조작, Data = 0xaacd (1010 1011 1100 1101 -> 1010 1010 1100 1101 )
ex_3)
Data ^= (0<<6); // Data 의 6번 bit를 반전, Data = 0xab8d ( 1010 1011 1100 1101 -> 1010 1011 1000 1101 )
'C,C++' 카테고리의 다른 글
visual studio 에서 strcpy, strncpy를 사용할 때 C4996 에러가 나오는 경우 대처방법 (0) | 2018.03.05 |
---|---|
char 문자 binary 값 변환 (0) | 2016.07.22 |
가변 인자 ( 가변 매개변수 ) (0) | 2016.07.05 |
매개변수 구현 방법 ( Call-by-Value, Call-by-Reference) (0) | 2016.07.05 |
sprintf() 함수 (0) | 2015.03.26 |