10/15/2016

C언어의 연산자 설명 (Bit 관련설명)

1. C의 연산자 관련 설명 (Bit 중심 )

C언어에서 Bit 관련 연산자는 주로 아래의 6개로 구성이 된다.

  •  비트 관련 연산자  
  1. <<          : 1 bit left Shift 
  2. >>          : 1 bit right Shit 
  3. |             :  OR 
  4. &            :  AND 
  5. ~            :  NOT 
  6. ^            :  Exclusive OR  (둘 다 다르면 1이고, 동일하면 0)

AND , OR , NOT 연산자는 잘 알겠지만, XOR 매번 헷갈린다. 
그래서 아래와 같이 적어놓는다. 

XOR truth table
InputOutput
AB
000
011
101
110



  • 논리 연산자 
  1. && :  logical-AND
  2. ||    :  logical-OR 


논리연산자는 if 문 이나 while 문  비교하는 곳에 사용이 되며,
연산자의 우선순위가 낮기 때문에 아래와 같이 두개의 비교가 끝난 후,
결과 값이  (a > 0) => 1 ,  ( b < 0) => 1  일 경우 이 값을 기준으로 논리적으로 AND OR 연산을 한다.

if ( a> 0 && b <0 a="" nbsp="" while=""> 0 || b < 0) 


2. C 언어의 BIT 연산자 활용

아래와 같이 매크로로 선언하여, 간단히 정의해서 사용할 수 있다.


#define BSET(n)        (1<<(n))

#define BUNSET(n)     ~(1<<(n))

/* set n-th bit in x */
#define B_SET(x, n)      ((x) |= (1<<(n)))

/* unset n-th bit in x */
#define B_UNSET(x, n)    ((x) &= ~(1<<(n)))

/* set n-th bit in x */
#define B_ALLSET(x, n)      ((x) |= (n))

/* unset n-th bit in x */
#define B_ALLUNSET(x, n)    ((x) &= ~(n))


/* test if n-th bit in x is set */
//#define B_IS_SET(x, n)   (((x) & (1<<(n)))?1:0)
#define B_IS_SET(x, n)   ((x) & (1<<(n)))

/* toggle n-th bit in x */
#define B_TOGGLE(x, n)   ((x) ^= (1<<(n)))


혹은 mask로 이용하여 and 연산으로  if 문 안에 넣어 사용한다.
mask = 0x1FFF; // 0 bit ~ 28bit 만 check 하고 싶을 경우

if (  n & mask )