Bit Mask

2016. 7. 6. 09:22C,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 )