C언어. 비트 연산자 알아보기
🌟 비트 연산자란?
비트(bit) 단위로 논리 연산이나 이동 연산을 할 때 사용하는 연산자이다. 종류는 다음과 같다.
종류 | 설명 |
---|---|
& | 비트 AND 연산. 대응하는 비트가 모두 1이면 1을 반환한다. |
| | 비트 OR 연산. 대응하는 비트 중에 하나라도 1이 있으면 1을 반환한다. |
^ | 비트 XOR 연산. 대응하는 비트가 다르면 1을 반환한다. |
~ | 비트 NOT 연산. 1은 0으로, 0은 1로 반환한다. |
« | left shift 연산. 비트를 왼쪽으로 이동시킨다. |
» | right shift 연산. 비트를 오른쪽으로 이동시킨다. |
🌟 사용법
AND 연산
int main()
{
int a = 1; //0000 0001
int b = 5; //0000 0101
printf("%d",a & b);
return 0;
}
001 AND 101 = 001
이므로 a & b는 1을 반환한다.
OR 연산
int main()
{
int a = 1; //0000 0001
int b = 5; //0000 0101
printf("%d",a | b);
return 0;
}
001 OR 101 = 101
이므로 이를 10진수로 바꾸면 5가 되어 a / b는 5를 반환한다.
XOR 연산
int main()
{
int a = 1; //0000 0001
int b = 5; //0000 0101
printf("%d",a ^ b);
return 0;
}
001 XOR 101 = 100
이므로 이를 10진수로 바꾸면 4가 되어 a ^ b는 4를 반환한다.
NOT 연산
int main()
{
int a = 1; //0000 0001
printf("%d", ~a);
return 0;
}
~0000 0001 = 1111 1110
이므로 15가 출력되야 하나 뭐가 문제인지 -2가 출력됐다. 하지만 15인 건 맞음!
« 연산
int main() {
int a = 1; //0000 0001
printf("%d", a<<3);
return 0;
}
0000 0001 << 3 = 0000 1000
이므로 8이 출력된다. 쉬프트 연산자는 뒤에 숫자만큼 비트를 이동시켜줌!
» 연산
int main() {
int a = 8; //0000 1000
printf("%d", a>>2);
return 0;
}
0000 1000 >> 2 = 0000 0010
이므로 2가 출력된다. 비트가 이동하는 방향만 바뀌었다고 보면 됨!
댓글남기기