C/C++/C
[C언어] 비트단위연산자
꿀꿀이냐옹이
2009. 7. 21. 14:07
반응형
1. & 연산자 ( 비트단위 AND )
&연산은 두 개의 비트가 모두 1일때 1을 반환하는 연산이다.
0 & 0 → 0을 반환
0 & 1 → 0을 반환
1 & 0 → 0을 반환
1 & 1 → 1을 반환
예제코드)
int main()
{
int a = 15;
int b = 20;
int c = a&b;
printf( "AND연산 결과 : %d", c ); // 출력결과 4
}
00000000 00000000 00000000 00001111 // 15
& 00000000 00000000 00000000 00010100 // 20
-------------------------------------
00000000 00000000 00000000 00000100 // 4 비트 연산 결과
2. | 연산자 ( 비트단위 OR )
|연산은 두 개의 비트 중 하나라도 1이면 1을 반환하는 연산이다.
0 | 0 → 0을 반환
0 | 1 → 1을 반환
1 | 0 → 1을 반환
1 | 1 → 1을 반환
예제코드)
int main()
{
int a = 15;
int b = 20;
int c = a|b;
printf( "AND연산 결과 : %d", c ); // 출력결과 31
}
00000000 00000000 00000000 00001111
|(OR) 00000000 00000000 00000000 00010100
------------------------------------------
00000000 00000000 00000000 00011111 // 31
3.^연산자( 비트단위 XOR )
^연산은 두 개의 비트가 서로 다를 경우에 1을 반환하는 연산이다.
0 ^ 0 → 0을 반환
0 ^ 1 → 1을 반환
1 ^ 0 → 1을 반환
1 ^ 1 → 0을 반환
예제코드)
int main()
{
int a = 15;
int b = 20;
int c = a^b;
printf( "XOR연산 결과 : %d", c ); // 출력결과 27
}
00000000 00000000 00000000 00001111
^(XOR) 00000000 00000000 00000000 00010100
------------------------------------------
00000000 00000000 00000000 00011011 // 27
4. ~연산자 ( 비트단위 NOT )
보통은 보수 연산자라고 해서 비트를 반전시킨다.
~0 → 1을 반환
~1 → 0을 반환
int main()
{
int a = 15;
int b = ~a;
printf("NOT연산 결과 : %d", b); // 출력결과 -16
}
00000000 00000000 00000000 00001111
--------------------------------------------
~(NOT) 11111111 11111111 11111111 11110000 // -16
5. <<,>>연산자 (비트단위 shift)
비트를 이동시키는 연산자에는 두 가지가있다. "<<" 와 ">>"
■ << 연산자 : 왼쪽쉬프트 연산
a << b → a의 비트들을 b칸씩 왼쪽으로 이동한 값을 반환
8 << 2 → 8의 비트들을 2칸씩 왼쪽으로 이동한 값을 반환
int main()
{
int a = 15;
int b = a<<2;
printf("<<2 연산 결과 : %d ", b); // 출력결과 60
}
00000000 00000000 00000000 00001111
------------------------------------- <<2로 연산
00 00000000 00000000 00000000 00111100
↑ ↑
앞으로 밀려난 비트는 삭제 추가되는 비트는 무조건 0
*** 비트는 자리가 앞쪽으로 한칸씩 밀려날때마다 값이 두 배가 된다.
ㄴㅁㅇㄻㄴㄹ
■ >> 연산자 : 오른쪽 쉬프트 연산
a >> b → a의 비트들을 b칸씩 오른쪽으로 이동한 값을 반환
8 >> 2 → 8의 비트들을 2칸씩 오른쪽으로 이동한 값을 반환
a = -10;
b = a>>2;
11111111 11110110 // -10 보기의 편의를 위해 앞의 0은 없앴다.
-------------------- >>2의 연산
0011111111 111101 // case 1
1111111111 111101 // case 2
*** 변수의 비트를 오른쪽으로 옮기면 왼쪽의 빈자리가 생기게 되는데 시스템의 따라 값이 달라진다. 음의 값을 유지하기 위해 1을 채우기도하고 양수의 >>연산과 마찬가지로 0을 채우기도 한다.
반응형