Table
연산자 개념
•
자료를 대상으로 각종 연산 수행을 지시하는 기호
연산자 종류
구분 | 연산자 | 설명 |
산술 연산자 | +, -, *, /, %, ++, -- | 사칙연산 및 증감 연산 |
관계 연산자 | >, <, >=, <=, ==, != | 대소 및 등가 비교 |
논리 연산자 | &&, ` | |
대입 연산자 | =, +=, -=, *=, /=, %= 등 | 연산과 대입을 함께 수행 |
조건 연산자 | ?: | 조건에 따라 값 선택 |
비트 연산자 | &, ` | , ^, ~, <<, >>` |
기타 연산자 | sizeof(), ,, &, *, (type) | 주소, 포인터, 형변환 등 |
산술 연산자
연산자 | 설명 | 예시 코드 | 결과 |
+, -, *, / | 덧셈, 뺄셈, 곱셈, 나눗셈 | 5 + 3, 3.0 / 2.0, 3 / 2 | 8, 1.5, 1 |
% | 나머지 계산 (정수형만) | 5 % 3, -5 % 3, 5 % -3, -5 % -3 | 2, -2, 2, -2 |
++ | 1 증가 | ++i, i++ | 전치: 먼저 증가 / 후치: 나중 증가 |
-- | 1 감소 | --i, i-- | 전치: 먼저 감소 / 후치: 나중 감소 |
증감 연산자 예시 (a=10 일때)
수식 | 실행 결과(a) | 수식의 값 | 비고 |
b = ++a; | 11 | 11 | 전치 증가 |
b = a++; | 11 | 10 | 후치 증가 |
b = --a; | 9 | 9 | 전치 감소 |
b = a--; | 9 | 10 | 후치 감소 |
관계 연산자
연산자 | 의미 | 예시 코드 | 결과 |
== | 같다 | a == b | 같으면 1 |
!= | 다르다 | a != b | 다르면 1 |
>, < | 크다, 작다 | a > b, a < b | 참이면 1 |
>=, <= | 크거나 같다, 작거나 같다 | a >= b, a <= b | 참이면 1 |
논리 연산자
연산자 | 의미 | 예시 | 결과 |
&& | 논리곱 (AND) | (a > 2 && b <= 7) | 모두 참이면 1 |
|| | 논리합 (OR) | a || b | 하나만 참이어도 1 |
! | 부정 (NOT) | !a | a가 0이면 1, 아니면 0 |
int a = 4, b = 7;
printf("%d\n", a > 2 && b <= 7); // 1
printf("%d\n", a < 2 || b <= 7); // 1
printf("%d\n", !a); // 0
C
복사
•
주의: 논리 연산은 결과가 확정되면 이후 조건은 평가하지 않음 (short-circuit)
조건 연산자 (삼항 연산자)
형식 | 의미 | 예시 코드 | 결과 |
조건식 ? 참일때 : 거짓일때 | 조건이 참이면 앞, 거짓이면 뒤 실행 | a >= b ? a : b | 두 수 중 큰 값 출력 |
int a = 25, b = 13;
printf("최댓값 = %d\n", a >= b ? a : b); // 25
C
복사
대입 연산자
연산자 | 의미 | 예시 | 결과 |
= | 대입 | a = b + 10 | b+10의 값을 a에 저장 |
+= | 더해서 대입 | a += 3 | a = a + 3 |
-= | 빼서 대입 | a -= 3 | a = a - 3 |
*= | 곱해서 대입 | a *= 2 | a = a * 2 |
/= | 나누어서 대입 | a /= 2 | a = a / 2 |
%= | 나머지를 대입 | a %= 3 | a = a % 3 |
비트 연산자
•
정수형 값의 비트 단위로 연산을 수행하는 연산자
연산자 | 의미 | 예시 | 결과 |
& | AND | a & b | 둘 다 1이면 1 |
| | OR | a | b | 하나라도 1이면 1 |
^ | XOR | a ^ b | 서로 다르면 1 |
~ | NOT | ~a | 비트를 반전 |
<< | 왼쪽 시프트 | a << n | 비트를 왼쪽으로 이동 (2ⁿ배 곱) |
>> | 오른쪽 시프트 | a >> n | 비트를 오른쪽으로 이동 (2ⁿ 나눗셈) |
비트연산 활용
mask 사용
•
x & mask - mask의 비트가 0인 부분만 0으로 지워짐
mask : 000001111
x : 101100111
결과 : 000000111
C
복사
•
x | mask - mask의 1인 비트만 강제로 1로 설정
mask : 000001111
x : 101100111
결과 : 10111111
C
복사
•
x ^ mask - mask가 1인 위치만 0
1로 반전
mask : 00001111
x : 10110011
결과 : 10111100
C
복사
시프트 연산
•
2ⁿ 곱하기 - 왼쪽으로 n 비트 이동
◦
x: 0000 0000 0000 0000 0000 0000 0010 1000
◦
y: 0000 0000 0000 0000 0000 0001 0100 0000
◦
왼쪽으로 너무 많이 이동하면 오버플로우 발생
▪
예: 32비트 int는 약 ±21억까지 표현 가능하므로 그 이상 밀면 잘림 발생
int x = 40;
int y = x << 3; // y = x * 8
C
복사
•
2ⁿ 나누기 — 오른쪽으로 n 비트 이동
◦
x: 0000 0000 0000 0000 0000 0000 0010 1000
◦
y: 0000 0000 0000 0000 0000 0000 0000 1010
◦
음수의 경우 부호 비트 유지(맨앞 비트)
int x = 40;
int y = x >> 2; // y = x / 4
C
복사
기타 연산자
연산자 | 의미 | 사용 예시 | 결과 |
sizeof() | 자료형 크기(byte) | sizeof(int) | 4 |
, | 두 식을 하나로 묶음 | (a = 1, b = 2) | 마지막 식의 값 |
& | 주소 연산자 | &a | a의 주소 |
* | 포인터가 가리키는 값 | *p | p가 가리키는 변수 값 |
(type) | 형변환 | (double)a / b | double형 나눗셈 수행 |

