티스토리 뷰
Bit 연산자?
- bit 연산이란 데이터의 최소단위(bit, 0,1)의 연산을 위해 사용되는 부호들을 의미한다.
- 비트 연산자의 피연산자는 정수 계열 형식(int, long , uint 등)이여야 한다.
- 개인적으로 실무에서 구현당시 직접 사용할 일은 거의 없으나 펌웨어, 각종 라이브러리 에서 사용되어지기 때문에 원리는 꼭 이해를 하고 있어야한다.
연산자의 종류
- & ( AND 연산자 ) [AND] : 피연산자 서로의 비트를 비교하여 양쪽 모두 1인 경우에만 해당비트는 1로 설정된다.
- 0000 1111 & 0000 1010 = 0000 1010
- | ( 포괄적 OR 연산자 ) [OR] : 피연산자 서로의 비트중 한쪽이 1인경우 해당비트는 1로 설정된다.
- 0000 1111 | 0000 1010 = 0000 1111
- ^( 베타적 OR 연산자 ) [XOR] : 피연산자 서로의 비트가 서로 다를 경우 해당비트는 1로 설정된다.
- 0000 1111 & 0000 1010 = 0000 0101
- << (왼쪽 쉬프트 연산) : 피연산자의 비트를 우항에 지정된 비트 수만큼 왼쪽으로 이동한다.
- 0000 1111 << 4 = 1111 0000
- >> (우측 쉬프트 연산) : 피연산자의 비트를 우항에 지정된 비트 수만큼 오른쪽으로 이동한다.
- 1111 0000 >> 4 = 0000 1111
- 주의사항
- 피연산자가 양수인 경우 쉬프트연산(>>) 수행시 좌측에 추가되는 비트는 0이다.
- 0000 1111 >> 2 = 0000 0011
- 음수인경우 우측 쉬프트 연산(>>) 수행시 좌측에 추가되는 비트는 1이니 이점을 주의해야한다.
- 1111 1001 >> 2 = 1111 1110
Example
- int형 값을 32bit 형태로 출력해주는 프로그램.
// int형 input을 32bit 로 변환하여 출력해주는 프로그램.
void printBit(int input)
{
int i,check = 1;
char bit;
for(i=31;i>=0;i--)
{
bit=(input&(1<<i))?1:0; // i 번째 bit를 뽑아낸다
printf("%d", bit);
if(i%4 == 0) printf(" ");
}
printf("\n");
}- 연산
int main(void)
{
int a = 0xFFFF; // 0000 0000 0000 0000 1111 1111 1111 1111
int b = 0xF0F0F0F0; // 1111 0000 1111 0000 1111 0000 1111 0000
printf("a : %d ,b : %d\n", a,b);
printBit(a);
printBit(b);
printf("AND연산 : ");
printBit(a & b); // AND
printf("OR연산 : ");
printBit(a | b); // OR
printf("XOR연산 : ");
printBit(a ^ b); // XOR
printf("NOT연산 : ");
printBit(~a);
printf("NOT연산 : ");
printBit(~b);
printf("오른쪽 쉬프트 4 : ");
printBit(a >> 4);
printf("오른쪽 쉬프트 4 : ");
printBit(b >> 4);
return 0;
}
붉은색 영역처럼 음수에 우측쉬프트를 수행할경우 좌측 비트는 1이 추가된다.
- Set ( 특정 비트를 1로 만드는 연산 ) TBC...
- Clear ( 특정 비트를 0으로 만드는 연산 ) TBC...
Reference.
'Dev > C & C++' 카테고리의 다른 글
| int to bit (0) | 2016.12.01 |
|---|---|
| BITMASK, 비트마스크 (0) | 2016.09.13 |
| 조건 연산자 (0) | 2016.09.13 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 안드로이드
- syntax highlighting
- 비트
- C
- Bit
- 비트마스크
- DNS
- Kotlin
- robocopy
- 비트연산자
- algorithm
- Android
- Highlighter
- Matrix
- 도메인
- mysql
- highlightjs
- 행렬
- mathjax
- 알고리즘
- 수식
- 삼항연산자
- python
- Math
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
글 보관함