C언어에서 Bit 관련 연산자는 주로 아래의 6개로 구성이 된다.
- 비트 관련 연산자
- << : 1 bit left Shift
- >> : 1 bit right Shit
- | : OR
- & : AND
- ~ : NOT
- ^ : Exclusive OR (둘 다 다르면 1이고, 동일하면 0)
AND , OR , NOT 연산자는 잘 알겠지만, XOR 매번 헷갈린다.
그래서 아래와 같이 적어놓는다.
Input | Output | |
---|---|---|
A | B | |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
- 논리 연산자
- && : logical-AND
- || : logical-OR
논리연산자는 if 문 이나 while 문 비교하는 곳에 사용이 되며,
연산자의 우선순위가 낮기 때문에 아래와 같이 두개의 비교가 끝난 후,
결과 값이 (a > 0) => 1 , ( b < 0) => 1 일 경우 이 값을 기준으로 논리적으로 AND OR 연산을 한다.
if ( a> 0 && b <0 a="" nbsp="" while=""> 0 || b < 0) 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 )