프로그램은 CPU가 처리하는 명령어의 집합이며,
우리가 사용하는 연산자는 컴파일 과정에서 CPU 명령어로 변환됩니다.
따라서 연산자를 이해하는 것은 곧 컴퓨터가 데이터를 처리하는 방식을 이해하는 것과 같습니다.
피연산자와 연산자 개념
연산에는 반드시 대상이 되는 데이터가 필요합니다.
이 데이터를 피연산자(operand) 라고 합니다.
- 피연산자 1개 → 단항 연산자
- 피연산자 2개 → 이항 연산자
- 피연산자 3개 → 삼항 연산자
산술 연산자 (Arithmetic Operator)
기본적인 수학 연산을 수행하는 연산자입니다.
- + : 더하기
- - : 빼기
- * : 곱하기
- / : 나누기
- % : 나머지
a + b; // 13
a - b; // 7
a * b; // 30
a / b; // 3 (정수 나눗셈 → 몫)
a % b; // 1 (나머지)
정수 나눗셈 특징
정수 / 정수 = 몫만 계산 (소수 버림)
대입 연산자 (Assignment Operator)
오른쪽 값을 왼쪽 변수에 저장합니다.
a = 10;
주의
- = : 대입
- == : 값 비교
증감 연산자 (Increment / Decrement)
변수 값을 1씩 증가 또는 감소시키는 연산자입니다.
- ++ : 1 증가
- -- : 1 감소
a++; // 6
++a; // 7
✔전위 vs 후위 차이
int x = ++a; // 전위 → 먼저 증가 후 사용 → x=6, a=6
int y = a++; // 후위 → 먼저 사용 후 증가 → y=6, a=7
반복문에서 매우 자주 사용됩니다.
관계 연산자 (Relational Operator)
값의 크기 또는 동일 여부를 비교합니다.
결과는 참(1) 또는 거짓(0) 입니다.
- < : 작다
- > : 크다
- <= : 작거나 같다
- >= : 크거나 같다
- == : 같다
- != : 같지 않다
a > b; // 1
a < b; // 0
a == b; // 0
a != b; // 1
조건문에서 핵심 역할
printf("a가 더 큼");
}
논리 연산자 (Logical Operator)
조건식을 조합하거나 반전할 때 사용합니다.
- && : AND (둘 다 참)
- || : OR (하나라도 참)
- ! : NOT (참/거짓 반전)
(a > 0 && b > 0); // 1
(a > 0 || b < 0); // 1
!(a > b); // 0
연산 결과 처리
연산 결과를 변수에 저장하지 않으면 값은 사라집니다.
c = a + b; // 결과 저장
따라서 연산 결과는
✔ 바로 사용하거나
✔ 변수에 저장해야 합니다.
핵심 포인트 정리
- = 는 값 저장, == 는 값 비교
- 정수 나눗셈 / → 몫만 계산
- % → 나머지 계산
- a++ (후위) → 사용 후 증가
- ++a (전위) → 증가 후 사용
- 관계/논리 연산 결과 → 1 또는 0
연산자 전체 요약표
| 산술 | + | 더하기 | 5+3 | 8 |
| 산술 | - | 빼기 | 5-3 | 2 |
| 산술 | * | 곱하기 | 5*3 | 15 |
| 산술 | / | 나누기 | 5/3 | 1 |
| 산술 | % | 나머지 | 5%3 | 2 |
| 대입 | = | 값 저장 | a=5 | a에 5 |
| 증감 | ++ | 1 증가 | a++ | a+1 |
| 증감 | -- | 1 감소 | a-- | a-1 |
| 관계 | > | 크다 | 5>3 | 1 |
| 관계 | < | 작다 | 5<3 | 0 |
| 관계 | == | 같다 | 5==3 | 0 |
| 관계 | != | 같지 않다 | 5!=3 | 1 |
| 논리 | && | AND | T&&F | 0 |
| 논리 | || | OR | T||F | 1 |
| 논리 | ! | NOT | !T | 0 |
C언어에는 산술·관계·논리 연산자 외에도 실무와 시스템 프로그래밍에서 자주 쓰이는 다양한 연산자가 있습니다.
특히 메모리, 자료형, 비트 처리와 관련된 연산자는 C언어의 핵심 특징과도 연결됩니다.
형 변환 연산자 (Type Cast)
형 변환 연산자는 피연산자의 값을 원하는 자료형으로 일시적으로 변환합니다.
(int)3.14 // 3.14 → 3
변환 시 원본 변수의 자료형이나 값은 변하지 않습니다.
double b = (double)a; // a는 여전히 int
특징
- 단항 연산자
- 값만 일시 변환
- 변수 자체의 타입은 유지
sizeof 연산자
sizeof는 피연산자의 메모리 크기를 바이트 단위로 반환합니다.
sizeof(double) // 8
sizeof(a) // 변수 크기
피연산자 대상
- 변수
- 상수
- 자료형
- 수식
sizeof(arr); // 배열 전체 크기
활용
- 메모리 크기 확인
- 동적 메모리 할당
- 구조체 크기 계산
주의
sizeof는 함수가 아니라 연산자입니다.
복합대입 연산자
연산과 대입을 동시에 수행합니다.
종류
- +=
- -=
- *=
- /=
- %=
b *= 2; // b = b * 2
특징
- 왼쪽은 반드시 변수
- 오른쪽 연산 후 마지막에 대입
- 대입 연산자와 동일한 우선순위
a += 2 * 3; // a = a + 6 → 11
콤마 연산자
여러 수식을 순서대로 실행하고 마지막 값이 결과가 됩니다.
a = (1, 2, 3); // a = 3
동작 방식
- 왼쪽 → 오른쪽 순서 실행
- 마지막 값이 결과
특징
- 대입 연산자보다 우선순위 낮음
- 대입과 함께 사용 시 괄호 필요
조건 연산자 (삼항 연산자)
조건에 따라 두 값 중 하나를 선택합니다.
구문
예시
동작
- 조건 참 → 두 번째 값
- 조건 거짓 → 세 번째 값
특징
- 유일한 삼항 연산자
- if문을 간단히 대체 가능
비트 연산자
정수 데이터를 비트 단위로 연산합니다.
비트 논리 연산자
- & : AND
- | : OR
- ^ : XOR
- ~ : NOT
비트 이동 연산자
- << : 왼쪽 이동
- : 오른쪽 이동
예시
int b = 3; // 0011
a & b; // 0001 → 1
a | b; // 0111 → 7
a ^ b; // 0110 → 6
a << 1; // 1010 → 10
특징
- 정수형에만 사용
- 하드웨어/임베디드/성능 최적화에서 중요
연산자 우선순위와 결합 방향
여러 연산자가 함께 사용되면 우선순위에 따라 계산됩니다.
기본 순서
단항 > 산술 > 비트이동 > 관계 > 논리 > 삼항 > 대입 > 콤마
예시
혼동 가능 시 괄호 사용 권장
핵심 포인트 정리
- 형 변환은 값만 일시 변환하며 변수 타입은 유지된다
- sizeof는 함수가 아닌 연산자이다
- 복합대입은 연산 후 대입된다
- 콤마 연산자는 마지막 값이 결과이다
- 조건 연산자는 유일한 삼항 연산자이다
- 비트 연산자는 정수형에만 사용된다
- 연산 순서가 헷갈리면 괄호를 사용한다
기타 연산자 요약표
| 형변환 | (type) | 자료형 변환 | (double)10 | 10.0 |
| sizeof | sizeof | 크기 반환 | sizeof(int) | 4 |
| 복합대입 | += | 더하고 대입 | a+=3 | a+3 |
| 복합대입 | -= | 빼고 대입 | a-=3 | a-3 |
| 복합대입 | *= | 곱하고 대입 | a*=3 | a×3 |
| 복합대입 | /= | 나누고 대입 | a/=3 | a÷3 |
| 복합대입 | %= | 나머지 대입 | a%=3 | a%3 |
| 콤마 | , | 순차 실행 | (1,2,3) | 3 |
| 조건 | ?: | 조건 선택 | a>b?a:b | 값 선택 |
| 비트 | & | AND | 5&3 | 1 |
| 비트 | | | OR | 5|3 | 7 |
| 비트 | ^ | XOR | 5^3 | 6 |
| 비트 | ~ | NOT | ~5 | 비트반전 |
| 비트이동 | << | 좌이동 | 5<<1 | 10 |
| 비트이동 | >> | 우이동 | 5>>1 | 2 |
본 포스팅은 『혼자 공부하는 C언어』 교재 내용을 바탕으로 개인 학습 목적으로 재구성·정리한 글입니다.
© 서현우, 한빛미디어
'복습(C)' 카테고리의 다른 글
| 3강 - 변수와 데이터 입력 (0) | 2026.02.22 |
|---|---|
| 2강 - 상수와 데이터 출력 (0) | 2026.02.22 |
| 1강 - 프로그램과 C언어 (0) | 2026.02.22 |