
💡 1분 핵심 요약 (TL;DR)
- ✅ 연산자 우선순위 — 소괄호 → 증감/논리부정 → 산술(×÷) → 산술(+-) → 비교 → 논리 → 할당 순으로 계산
- ✅ 산술 연산자 — +, -, *, / 외에 나머지를 구하는 % (모듈로) 연산자가 있음
- ✅ 증감 연산자 — ++가 앞에 있으면 먼저 증가 후 실행, 뒤에 있으면 실행 후 증가 (위치에 따라 결과 다름!)
- ✅ 비교 연산자 — 결과는 참(1) 또는 거짓(0)으로 출력됨
- ✅ 논리 연산자 — &&(AND): 모두 참이어야 참 / ||(OR): 하나라도 참이면 참 / !(NOT): 참↔거짓 반전
01 연산자 우선순위 — 전체 지도
어떤 연산이 먼저 계산되는지 한눈에 파악하기
C언어에는 수십 가지 연산자가 있지만, 우리가 가장 자주 쓰는 연산자들의 우선순위를 정리하면 아래와 같습니다. 수학에서 곱하기를 더하기보다 먼저 계산하는 것처럼, C언어도 연산자마다 계산 순서가 정해져 있습니다.
| 순위 | 연산자 종류 | 기호 예시 | 설명 |
| 1위 | 소괄호 | ( ) | 묶인 부분 최우선 계산 |
| 2위 | 증감 / 논리부정 | ++, --, ! | 단항 연산자 |
| 3위 | 산술 연산자 (곱/나누기) | *, /, % | 곱셈·나눗셈·나머지 |
| 4위 | 산술 연산자 (덧/뺄셈) | +, - | 덧셈·뺄셈 |
| 5위 | 비교 연산자 | <, >, <=, >=, ==, != | 크기·같음 비교 → 0 또는 1 반환 |
| 6위 | 논리 연산자 | &&, || | AND / OR 조합 판단 |
| 7위 | 할당 연산자 | =, +=, -=, *=, /= | 변수에 값 저장 |
✓ 실전 팁
우선순위가 헷갈릴 때는 소괄호로 명시적으로 묶어주는 것이 가장 안전합니다. 복잡한 계산은 여러 줄로 나눠 쓰는 것도 좋은 방법입니다.

02 산술 연산자 — 사칙연산과 나머지(%)
+, -, *, / 그리고 낯선 % 연산자까지
사칙연산은 수학과 동일합니다. 주의할 점은 나눗셈(/)은 정수끼리 연산하면 소수점이 버려진다는 것과, 나머지를 구하는 % 연산자가 존재한다는 점입니다.
기본 산술 연산 예제
산술 연산자 전체 예제
#include <stdio.h>
int main() {
int n1 = 5, n2 = 3;
printf("더하기: %d\n", n1 + n2); // 8
printf("빼기: %d\n", n1 - n2); // 2
printf("곱하기: %d\n", n1 * n2); // 15
printf("나누기: %d\n", n1 / n2); // 1 (몫만 나옴!)
printf("나머지: %d\n", n1 % n2); // 2
return 0;
}
📖 % 연산자 (모듈로, 나머지)
5 ÷ 3 을 계산하면 몫 = 1, 나머지 = 2 입니다.
· 5 / 3 → 1 (몫)
· 5 % 3 → 2 (나머지)
공학용 계산기의 mod 기능과 동일합니다. 짝수/홀수 판별, 배수 확인 등에 자주 활용됩니다.
정수(int) vs 실수(double) 혼합 연산 — 타입 변환 주의!
int + double 혼합 연산 실습
#include <stdio.h>
int main() {
// int, double 선언
int n1 = 5, result_int;
double d1 = 2.5, result_d;
// 정수 + 소수 → int에 저장 (소수점 손실)
result_int = n1 + d1;
// 정수 + 소수 → double에 저장 (정확)
result_d = n1 + d1;
printf("n1 + d1 = %d\n", result_int); // 7 (소수점 버려짐)
printf("n1 + d1 = %lf\n", result_d); // 7.500000 (정확)
printf("n1 + d1 = %lf\n", n1 + d1); // 7.500000 (표현 범위 넓은 쪽으로 자동 변환)
printf("n1 + d1 = %d\n", (int)(n1 + d1)); // 7 (명시적 타입 변환)
return 0;
}
int와 double을 함께 연산하면 표현 범위가 더 넓은 double로 자동 변환됩니다. 이를 묵시적(암묵적) 타입 변환이라고 합니다. 이 결과를 int 변수에 저장하면 소수점이 잘려 나갑니다.
| int 변수에 저장 (소수 손실) int n1 = 5; double d1 = 2.5; int result = n1 + d1; // result = 7 (0.5 버려짐!) · 소수점 이하가 버려집니다 (반올림 아님) · 묵시적 타입 변환 발생 |
double 변수에 저장 (정확) int n1 = 5; double d1 = 2.5; double result = n1 + d1; // result = 7.5 (정확!) · 소수점까지 정확하게 저장 · 타입 변환 없이 바로 저장 |
⚠️ 명시적 타입 변환 (캐스팅)
필요하다면 앞에 원하는 타입을 소괄호로 명시해서 강제 변환할 수 있습니다.
printf("%d", (int)(n1 + d1));
단, 일반적인 상황에서는 처음부터 적절한 타입의 변수를 사용하는 것이 바람직합니다.

03 증감 연산자 — 위치에 따라 결과가 달라진다!
++, -- 의 앞/뒤 위치 차이를 반드시 이해하자
증감 연산자는 변수의 값을 1씩 늘리거나 줄이는 연산자입니다. 단순해 보이지만 ++ 또는 --가 변수 앞에 오느냐 뒤에 오느냐에 따라 실행 순서가 달라집니다.
| 전위 증감 (++n, --n) 먼저 증감 → 그 다음 코드 실행 int n = 3; printf("%d", ++n); // 출력: 4 // n의 값도 4 · 코드 실행 전에 값이 바뀜 · 출력할 때 이미 증가된 값이 반영 |
후위 증감 (n++, n--) 코드 실행 → 그 다음 증감 int n = 3; printf("%d", n++); // 출력: 3 // 출력 후 n의 값은 4 · 코드 실행 후에 값이 바뀜 · 출력할 때는 아직 원래 값 |
전위 vs 후위 — 헷갈리는 예제 분석
⚠️ 결과가 다른 예제 — 꼭 확인!
int n1 = 3, n2 = 3;
printf("%d\n", ++n1); // 전위: 4 출력 (먼저 증가)
printf("%d\n", --n1); // 전위: 3 출력 (먼저 감소)
printf("%d\n", n1); // 그대로: 3 출력
printf("%d\n", n2++); // 후위: 3 출력 (먼저 출력, 나중에 증가)
printf("%d\n", n2--); // 후위: 4 출력 (먼저 출력, 나중에 감소)
printf("%d\n", n2); // 그대로: 3 출력
// 전위 결과: 4, 3, 3
// 후위 결과: 3, 4, 3
📖 후위 증감 원리 이해
n2++ 에서 printf를 실행할 당시 n2는 아직 3입니다.
→ 3을 출력하고 나서, 해당 줄이 끝날 때 n2가 4로 증가합니다.
다음 줄에서는 n2가 4인 상태로 시작하므로 n2-- 는 4를 출력 후 3으로 감소합니다.
04 할당 연산자 — = 에서 파생된 단축 표현
반복문에서 특히 유용한 복합 할당 연산자
우리가 이미 아는 = (할당) 연산자에서 파생된 복합 할당 연산자들이 있습니다. 변수에 연산 결과를 다시 저장할 때 코드를 더 짧게 쓸 수 있습니다.
| 연산자 | 의미 | 예시 (r = 3 기준) |
| r = 3 | 그대로 저장 | r = 3 → r은 3 |
| r += 3 | r = r + 3 | r += 3 → r은 6 |
| r -= 2 | r = r - 2 | r -= 2 → r은 4 |
| r *= 2 | r = r * 2 | r *= 2 → r은 6 (3×2) |
| r /= 3 | r = r / 3 | r /= 3 → r은 1 |
| r %= 2 | r = r % 2 | r %= 2 → r은 1 (3÷2 나머지) |
05 비교 연산자 — 결과는 항상 0 또는 1
두 값의 크기·같음을 비교하고 참(1)/거짓(0)으로 반환
비교 연산자는 두 값을 비교해서 맞으면 1(참), 틀리면 0(거짓)을 반환합니다. 조건문(if)과 반복문(for/while)에서 매우 자주 사용됩니다.
❌ 주의: == 와 = 는 완전히 다르다!
· = : 오른쪽 값을 왼쪽 변수에 저장(할당)
· == : 두 값이 같은지 비교 (참이면 1, 거짓이면 0 반환)
초보자가 가장 많이 하는 실수입니다. if (x = 5) 는 비교가 아니라 할당입니다!
비교 연산자 예제 (x=3, y=5, z=3)
int x = 3, y = 5, z = 3;
printf("%d\n", x == y); // 0 (거짓: 3 ≠ 5)
printf("%d\n", x == z); // 1 (참: 3 = 3)
printf("%d\n", x != y); // 1 (참: 3 ≠ 5, 다르다)
printf("%d\n", x >= z); // 1 (참: 3 ≥ 3, 같으므로 참)
printf("%d\n", x >= y); // 0 (거짓: 3 < 5)
printf("%d\n", x < y); // 1 (참: 3 < 5)
| 연산자 | 의미 | 예시 결과 (x=3, y=5) |
| == | 같다 | x == y → 0 |
| != | 다르다 | x != y → 1 |
| > | 크다 | x > y → 0 |
| < | 작다 | x < y → 1 |
| >= | 크거나 같다 | x >= y → 0 |
| <= | 작거나 같다 | x <= y → 1 |

06 논리 연산자 — 참/거짓을 조합하는 논리학
&& (AND), || (OR), ! (NOT) 완벽 이해
논리 연산자는 두 개 이상의 조건을 종합해서 최종 참/거짓을 판단합니다. 일상 언어로 비유하면 이렇습니다.
| && (AND) A && B 둘 다 참이어야 참 하나라도 거짓 → 거짓 예: "지구인이고 강아지다" → 하나가 거짓이므로 거짓 |
|| (OR) A || B 하나라도 참이면 참 둘 다 거짓이어야 거짓 예: "지구인이거나 강아지다" → 하나가 참이므로 참 |
! (NOT) !A 참 ↔ 거짓 반전 참 → 거짓, 거짓 → 참 예: "지구인이 아니다" → 원래 참을 반전 → 거짓 |
논리 연산자 코드 예제
&&, ||, ! 연산자 예제 (x=3, y=5, z=3)
int x = 3, y = 5, z = 3;
int result;
// AND 연산: (x==y)는 거짓(0), (x==z)는 참(1) → 하나라도 거짓이므로 거짓
result = (x == y) && (x == z);
printf("%d\n", result); // 0 (거짓)
// OR 연산: (x==y)는 거짓, (x==z)는 참 → 하나라도 참이므로 참
result = (x == y) || (x == z);
printf("%d\n", result); // 1 (참)
// NOT 연산: AND 결과가 0(거짓) → 반전하면 1(참)
result = !((x == y) && (x == z));
printf("%d\n", result); // 1 (참)
진리표 — AND / OR / NOT 한눈에 보기
| A | B | A && B | A || B | !A |
| 1(참) | 1(참) | 1 (참) | 1 (참) | 0 (거짓) |
| 1(참) | 0(거짓) | 0 (거짓) | 1 (참) | 0 (거짓) |
| 0(거짓) | 1(참) | 0 (거짓) | 1 (참) | 1 (참) |
| 0(거짓) | 0(거짓) | 0 (거짓) | 0 (거짓) | 1 (참) |

07 핵심 정리
오늘 배운 연산자와 우선순위 총정리
📌 핵심 정리
· 연산자 우선순위 : 소괄호() > 증감/NOT > 산술(*/%) > 산술(+-) > 비교 > 논리 > 할당 순서로 계산
· % 나머지 연산자 : 5 % 3 = 2 (몫이 아닌 나머지 반환), 짝수/홀수 판별 등에 활용
· 묵시적 타입 변환 : int + double 연산 결과는 double. int 변수에 저장하면 소수점 손실 발생
· 전위 증감 (++n) : 먼저 증가/감소한 후 코드 실행
· 후위 증감 (n++) : 코드 실행 후 마지막에 증가/감소 — 출력값이 다름에 주의!
· 비교 연산자 결과 : 참이면 1, 거짓이면 0 반환. ==는 비교, =는 할당으로 구분
· && (AND) : 모두 참이어야 참 / || (OR) : 하나라도 참이면 참 / ! (NOT) : 참↔거짓 반전
※ 이 글은 아래 동영상으로 학습한 내용을 요약한 글입니다.
출처 동영상: https://youtu.be/oL6ZuaHCaTI?si=agLKC6NnruZ5PqjS
태그 : C언어 연산자 종류연산자 우선순위C언어 증감 연산자전위 후위 증감 차이C언어 비교 연산자C언어 논리 연산자C언어 나머지 연산자C언어 타입 변환AND OR NOT 연산자C언어 기초 연산
'학과 수업 노트 > C언어 기초 배우기' 카테고리의 다른 글
| 6. 조건문 (0) | 2026.04.28 |
|---|---|
| 4. 입력과 출력 (0) | 2026.04.19 |
| 3. 데이터 타입 (0) | 2026.04.19 |
| 2. 변수와 상수 (0) | 2026.04.13 |
| 1. C언어란 어떤 언어인가? (0) | 2026.04.13 |



