본문 바로가기

공부/C언어

(C) 비트 연산자

연산자 연산자의 기능 결합방향
& 비트단위로 AND 연산을 한다.
| 비트단위로 OR 연산을 한다.
^ 비트단위로 XOR연산을 한다.
~ 단항 연산자로서 피연산자의 모든 비트를 반전시킨다.
<< 피연산자의 비트 열을 왼쪽으로 이동시킨다.
>> 피연산자의 비트 열을 오른쪽으로 이동시킨다.

 

예제

// &연산자, AND
void main(void)
{
	int num1 = 15;
	int num2 = 20;
	int num3 = num1 & num2;
	printf("AND 연산의 결과 %d \n", num3);
}

 

결과

 AND 연산의 결과 4

     00000000 00000000 00000000 00001111

&  00000000 00000000 00000000 00010100
                                                                                                

     00000000 00000000 00000000 00000100
AND
0 & 0 → 0

0 & 1 → 0

1 & 0 → 0

1 & 1 → 1


// |연산자, OR
void main(void)
{
	int num1 = 15;
	int num2 = 20;
	int num3 = num1 | num2;
	printf("OR 연산의 결과 %d \n", num3);
}
 OR 연산의 결과: 31

// ^연산자, XOR
void main(void)
{
	int num1 = 15;
	int num2 = 20;
	int num3 = num1 ^ num2;
	printf("XOR 연산의 결과 %d \n", num3);
}
 XOR 연산의 결과: 27

// ~연산자, NOT
void main(void)
{
	int num1 = 15;
	int num2 = ~num1;
	printf("NOT 연산의 결과 %d \n", num2);
}
 NOT 연산의 결과: -16

// <<연산자, 비트의 왼쪽 이동
void main(void)
{
	int num = 20;

	int result1 = num << 1;
	int result2 = num << 2;
	int result3 = num << 3;

	printf("1칸 이동 결과: %d \n", result1);
	printf("2칸 이동 결과: %d \n", result2);
	printf("3칸 이동 결과: %d \n", result3);
}

 

결과

 1칸 이동 결과: 30
 2칸 이동 결과: 60
 3칸 이동 결과: 120

00000000 00000000 00000000 00011110 10진수로 30

00000000 00000000 00000000 00111100  10진수로 60

00000000 00000000 00000000 01111000  10진수로 120

 

왼쪽으로 한 칸씩 이동한다.
이동할수록 정수의 값은 두 배씩 증가한다.


// >>연산자, 비트의 오른쪽 이동
void main(void)
{
	int num = 20;

	int result1 = num >> 1;
	int result2 = num >> 2;
	int result3 = num >> 3;

	printf("1칸 이동 결과: %d \n", result1);
	printf("2칸 이동 결과: %d \n", result2);
	printf("3칸 이동 결과: %d \n", result3);
}
 1칸 이동 결과: 10
 2칸 이동 결과: 5
 3칸 이동 결과: 2

오른쪽으로 한 칸씩 이동할 때는 정수의 값이 반으로 줄어든다.