POST

c언어 비트연산자

&  :  비트단위로 AND 연산을 한다.

|  :  비트단위로 OR 연산을 한다.

^  :  비트단위로 XOR 연산을 한다.

~  :  단항 연산자 로서 피연산자의 모든 비트를 반전 시킨다.

<<  :  피연산자의 비트 열을 왼쪽으로 이동시킨다.

>>  :  피연산자의 비트 열을 오른쪽으로 이동 시킨다.




#include<stdio.h>

int main(void)

{

int num1 = 15; //00000000 00000000 00000000 00001111

int num2 = 20; //00000000 00000000 00000000 00010100

int result; //각연산의 결과 값 저장

 

result = num1&num2; //00000000 00000000 00000000 00000100

printf("AND연산의 결과 :%d\n", result);

 

result = num1 | num2; //00000000 00000000 00000000 00011111

printf("OR연산의 결과 :%d\n", result);

 

result = num1^num2; //00000000 00000000 00000000 00011011 서로 다른 비트를 1로 바뀐다. 서로 같을 경우 엔 0으로 바뀐다

printf("XOR연산의 결과 :%d\n", result);

 

result = ~num1; //11111111 11111111 11111111 11110000 최상위비트가 1로 되어 음수로 표현됨, 2의 보수를 취하면 양수로 변환(-1을 곱하면된다)

printf("NOT연산의 결과 :%d\n", result);   //비트를 반전시킨다.

 

result = num1 << 2; //00000000 00000000 00000000 00111100

printf("왼쪽으로 2칸 이동 결과 :%d\n", result);

 

result = num1 >> 2; //00000000 00000000 00000000 00000011

printf("오른쪽으로 2칸 이동 결과 :%d\n", result);

 

return 0;

}




여기서 ^(XOR) 연산을 이용하여 두수를 서로 바꾸어 줄 수도 있다.

#include<stdio.h>
int main(void)
{
int num1 = 15; //00000000 00000000 00000000 00001111
int num2 = 20; //00000000 00000000 00000000 00010100
int result; //각연산의 결과 값 저장
printf("num1 :%d, num2 :%d\n", num1, num2);

num1 = num1^num2; //00011011
printf(">num1 :%d\n", num1);

num2 = num1^num2; //00001111
printf(">num2 :%d\n", num2);

num1 = num1^num2; //00010100
printf(">num1 :%d\n", num1);

printf("num1 :%d, num2 :%d\n", num1, num2);

return 0;
}