연산자 | 연산자의 기능 | 결합방향 |
& | 비트단위로 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 |
오른쪽으로 한 칸씩 이동할 때는 정수의 값이 반으로 줄어든다.
'공부 > C언어' 카테고리의 다른 글
(C) 특수문자, 서식문자 (0) | 2020.06.15 |
---|---|
(C) 리터럴 상수, 심볼릭 상수 (0) | 2020.06.14 |
(C) 8진수 16진수를 이용한 데이터 표현 (0) | 2020.06.13 |
(C 예제) 사람의 명 수를 입력받고 자동차 종류를 결정 (0) | 2020.06.13 |
(C 예제) 정수를 입력받아 1부터 정수까지의 합, 짝수합, 홀수합, 팩토리얼을 계산하는 프로그램 (0) | 2020.06.08 |