비트 연산자
비트 연산자는 피연산자를 10진수나 16진수나 8진수와 같은 숫자가 아니라, 32비트(0과 1)의 집합으로 표현하는 연산자 입니다.또한 비트 연산자를 사용할 경우 프로그램의 용량을 매우 많이 줄일 수 있으며 속도 또한 증가한다는 장점이 있습니다.
그리고 비트 단위 연산자는 2진수 형태의 비트 자리별로 논리연산 하며 비트 연산자를 이해하려면 10진수와 2진수를 서로 바꿀 수 있어야 합니다.
그리고 비트 단위 연산자는 2진수 형태의 비트 자리별로 논리연산 하며 비트 연산자를 이해하려면 10진수와 2진수를 서로 바꿀 수 있어야 합니다.
10진수를 2진수로 바꾸기
10진수인 32를 2진수로 바꾸어 봅시다.
32을 2로 나누었을때 나오는 나머지들을 아래에서 위로 순서대로 써 올리면 2진수가 나옵니다.
32을 2로 나누었을때 나오는 나머지들을 아래에서 위로 순서대로 써 올리면 2진수가 나옵니다.
이렇게 32를 2진수로 바꾸면 011010이 됩니다.(예시: 11을 2진수로 바꿀시 1011이 나옵니다.)
2진수를 10진수로 바꾸기
이진수인 '00011010'을 10진수로 바꾸어 봅시다.
이진수를 나열하고 그 위에 뒤에서 부터 차례대로 2의 제곱수를 똑같이 나열한후 위아래로 곱해준 값을 더해줍니다.
이진수를 나열하고 그 위에 뒤에서 부터 차례대로 2의 제곱수를 똑같이 나열한후 위아래로 곱해준 값을 더해줍니다.
이렇게 00011010를 10진수로 바꾸면 26됩니다.(예시: 00001011을 2진수로 바꿀시 11이 나옵니다.)
이제 비트 연산자에 대해 배워봅시다.
아래의 코드를 직접 작성하고 실행해 봅시다.
#include <stdio.h> main () { printf ( "%d %d \n", 3 & 1, 3 | 1); printf ( "%d \n", 3 ^ 1); printf ( "%d %d \n", 3 << 1, 3 >> 1); }
실행결과
위 프로그램을 실행하면 숫자데이터를 2진수로 변환한 후 비트별로 논리연산을 실행한 결과를 출력합니다.
- 4행에서 비트 연산자 '&' 와 ' | ' 는 각각 논리곱과 논리합 연산을 비트 단위로 수행합니다. 따라서 3의 비트 값 11과 1의 비트 값 01의 논리곱을 비트 단위로 수행한 결과 1(이진수는01)을 출력하게 되고 같은 방식으로 비트 논리합 연산의 결과는 3(이진수는 11)이 출력됩니다.
- 5행에서 비트 연산자 '^' 은 배타적 논리합 연산을 비트 단위로 수행합니다. 배타적 논리합 연산은 두 비트의 값이 다를 때만 참(1)이 되는 연산 이므로, 연산 결과는 2가 됩니다.
- 6행에서'<<'와 '>>'은 비트 열을 일정 길이 만큼 이동시키는 시프트 연산자 입니다.
논리곱(AND, &)
두 값의 각 자릿수를 비교해, 두 값 모두에 1이 있을 때에만 1을, 나머지 경우에는 0을 계산합니다.
(예시: 1100(12)과 1010(10)을 비교할때, 1000(8)이 된다. )
논리합(OR, |)
두 값의 각 자릿수를 비교해, 둘 중 하나라도 1이 있다면 1을, 아니면 0을 계산합니다.
(예시: 1100(12)과 1010(10)을 비교할때 1110(14)이 된다. )
배타적 논리합(XOR, ^)
두 값의 각 자릿수를 비교해,값이 0으로 같으면 0, 값이 1로 같아도 0, 다르면 1을 계산합니다.
(예시: 1100(12)과 1010(“10)을 비교할때 0110(6)이 된다.)
쉬프트(shift, << or >>)
대상의 값을 2진 비트로 바꾼 후에 특정 비트 수만큼 이동 시키고 빈자리는 0으로 채우는 연산자입니다.
3<<1은 정수3을 1비트 만큼 왼쪽으로 이동시키며, 3>>1은 정수3을 1비트만큼 오른쪽으로 이동시킵니다.
(예시)
3<<1은 3(11)이 왼쪽으로 1비트만큼 이동하므로 6(110)이 되며,
3>>1은 3(11)이 오른쪽으로 1비트만큼 이동시키므로 1(01)이 되며 1의 자리 이하의 숫자는 절삭됩니다.
3<<1은 정수3을 1비트 만큼 왼쪽으로 이동시키며, 3>>1은 정수3을 1비트만큼 오른쪽으로 이동시킵니다.
(예시)
3<<1은 3(11)이 왼쪽으로 1비트만큼 이동하므로 6(110)이 되며,
3>>1은 3(11)이 오른쪽으로 1비트만큼 이동시키므로 1(01)이 되며 1의 자리 이하의 숫자는 절삭됩니다.
정리
비트 연산자의 쓰임
다음 토픽에선 비트 연산자인'~'와 보수 그리고 삼항연산자에 대해 알아봅시다!