우리의 IT
C언어 - 연산자 본문
C 언어에서 연산자는 특정 연산을 수행하는 기호 또는 키워드입니다. 연산자는 크게 다음과 같이 분류할 수 있습니다.
1. 산술 연산자 (Arithmetic Operators)
숫자 계산을 수행하는 연산자입니다.
연산자 의미 예시 (a = 10, b = 3) 결과
| + | 덧셈 | a + b | 13 |
| - | 뺄셈 | a - b | 7 |
| * | 곱셈 | a * b | 30 |
| / | 나눗셈 | a / b | 3 (정수 나눗셈) |
| % | 나머지 | a % b | 1 |
⚠️ 정수형 변수에서 / 연산을 하면 몫만 반환합니다. 소수점까지 구하려면 float 또는 double로 변수를 선언해야 합니다.
2. 대입 연산자 (Assignment Operators)
변수에 값을 할당하는 연산자입니다.
연산자 의미 예제 (a = 10) 결과
| = | 대입 | a = 5 | a는 5 |
| += | 덧셈 후 대입 | a += 3 | a = 13 |
| -= | 뺄셈 후 대입 | a -= 2 | a = 8 |
| *= | 곱셈 후 대입 | a *= 2 | a = 20 |
| /= | 나눗셈 후 대입 | a /= 5 | a = 2 |
| %= | 나머지 후 대입 | a %= 3 | a = 1 |
3. 비교 연산자 (Relational Operators)
두 값을 비교하여 참(1) 또는 거짓(0)을 반환하는 연산자입니다.
연산자 의미 예제 (a = 10, b = 3) 결과
| == | 같음 | a == b | 0 (false) |
| != | 다름 | a != b | 1 (true) |
| > | 큼 | a > b | 1 |
| < | 작음 | a < b | 0 |
| >= | 크거나 같음 | a >= b | 1 |
| <= | 작거나 같음 | a <= b | 0 |
4. 논리 연산자 (Logical Operators)
논리식을 판단하는 연산자입니다.
연산자 의미 예제 (a = 1, b = 0) 결과
| && | AND(논리곱) | a && b | 0 (false) |
| ` | ` | OR(논리합) | |
| ! | NOT(논리 부정) | !a | 0 |
5. 비트 연산자 (Bitwise Operators)
비트 단위로 연산하는 연산자입니다.
연산자 의미 예제 (a = 5(0101), b = 3(0011)) 결과
| & | 비트 AND | a & b | 1 (0001) |
| ` | ` | 비트 OR | `a |
| ^ | 비트 XOR | a ^ b | 6 (0110) |
| ~ | 비트 NOT | ~a | -6 (보수) |
| << | 왼쪽 시프트 | a << 1 | 10 (1010) |
| >> | 오른쪽 시프트 | a >> 1 | 2 (0010) |
⚠️ ~a 연산은 비트 반전(1의 보수)을 수행하며, 보수 표현법 때문에 -a-1이 됩니다.
6. 증감 연산자 (Increment and Decrement Operators)
값을 1 증가 또는 감소시키는 연산자입니다.
연산자 의미 예제 (a = 5) 결과
| ++a | 전위 증가 | b = ++a | a = 6, b = 6 |
| a++ | 후위 증가 | b = a++ | a = 6, b = 5 |
| --a | 전위 감소 | b = --a | a = 4, b = 4 |
| a-- | 후위 감소 | b = a-- | a = 4, b = 5 |
🚀 전위(++a)와 후위(a++)의 차이
- ++a는 값을 먼저 증가시키고 반환합니다.
- a++는 기존 값을 먼저 반환하고, 이후에 증가합니다.
7. 삼항 연산자 (Ternary Operator)
조건에 따라 값을 반환하는 연산자입니다.
📌 형식:
조건식 ? 참일 때 값 : 거짓일 때 값;
📌 예제:
int a = 10, b = 5;
int max = (a > b) ? a : b; // a가 b보다 크면 a, 아니면 b
printf("%d", max); // 출력: 10
8. 형 변환 연산자 (Type Casting Operator)
데이터 타입을 변환하는 연산자입니다.
📌 예제:
int a = 5;
double b = (double)a / 2; // 정수 5를 실수로 변환하여 2.5 반환
printf("%f", b); // 출력: 2.500000
9. sizeof 연산자
변수 또는 자료형의 크기를 반환하는 연산자입니다.
📌 예제:
printf("%lu", sizeof(int)); // 보통 4 (바이트) 출력
10. 쉼표 연산자 (Comma Operator)
여러 개의 표현식을 한 줄에서 실행할 때 사용됩니다.
📌 예제:
int a, b;
a = (b = 3, b + 2);
printf("%d", a); // 출력: 5
11. 포인터 연산자 (&, *)
포인터와 관련된 연산자입니다.
연산자 의미
| & | 변수의 주소 반환 |
| * | 포인터가 가리키는 값 |
📌 예제:
int a = 10;
int *ptr = &a; // a의 주소 저장
printf("%d", *ptr); // 출력: 10
🏆 C 언어 연산자 우선순위 (Operator Precedence)
연산자는 **우선순위(Precedence)**에 따라 연산이 수행됩니다.
또한 **결합 방향(Associativity)**에 따라 동일한 우선순위를 가진 연산자가 평가되는 방향이 결정됩니다.
🔹 연산자 우선순위 표
우선순위 연산자 설명 결합 방향
| 1 | (), [], ->, . | 괄호, 배열, 구조체 멤버 접근 | 좌→우 |
| 2 | ++, -- (후위) | 후위 증가/감소 | 좌→우 |
| 3 | ++, -- (전위), +, - (단항), !, ~, (type), * (포인터), & (주소), sizeof | 단항 연산자, 형 변환, 주소 연산 | 우→좌 |
| 4 | *, /, % | 곱셈, 나눗셈, 나머지 | 좌→우 |
| 5 | +, - | 덧셈, 뺄셈 | 좌→우 |
| 6 | <<, >> | 비트 이동 (Shift) | 좌→우 |
| 7 | <, <=, >, >= | 비교 연산 | 좌→우 |
| 8 | ==, != | 같음, 다름 비교 | 좌→우 |
| 9 | & | 비트 AND | 좌→우 |
| 10 | ^ | 비트 XOR | 좌→우 |
| 11 | ` | ` | 비트 OR |
| 12 | && | 논리 AND | 좌→우 |
| 13 | ` | ` | |
| 14 | ?: | 삼항 연산자 | 우→좌 |
| 15 | =, +=, -=, *=, /=, %=, <<=, >>=, &=, ^=, ` | =` | 대입 연산 |
| 16 | , | 쉼표 연산자 | 좌→우 |
🔹 우선순위 & 결합 방향 설명
- 높은 우선순위를 가진 연산자가 먼저 실행됨
- 결합 방향(Associativity):
- 좌→우(Left to Right): 왼쪽에서 오른쪽 순으로 실행
- 우→좌(Right to Left): 오른쪽에서 왼쪽 순으로 실행 (ex. 대입 연산 =)
🔹 우선순위 예제
📌 1. 산술 연산자 & 비교 연산자
#include <stdio.h>
int main() {
int result = 10 + 2 * 5; // 10 + (2 * 5) = 20
printf("%d\n", result); // 출력: 20
}
✔️ 곱셈(*)이 덧셈(+)보다 우선순위가 높아 먼저 실행됨
📌 2. 논리 연산자
#include <stdio.h>
int main() {
int a = 3, b = 4, c = 5;
int result = a < b && b < c; // (3 < 4) && (4 < 5) -> 1 && 1 -> 1
printf("%d\n", result); // 출력: 1
}
✔️ 비교 연산(<)이 논리 AND(&&)보다 우선순위가 높음
📌 3. 삼항 연산자 & 대입 연산자
#include <stdio.h>
int main() {
int a = 10, b = 20;
int max = (a > b) ? a : b;
printf("%d\n", max); // 출력: 20
}
✔️ ? : 연산자는 = 대입 연산보다 우선순위가 높아 먼저 실행됨
📌 4. 대입 연산자의 결합 방향
#include <stdio.h>
int main() {
int a, b, c;
a = b = c = 5; // (a = (b = (c = 5)))
printf("%d %d %d\n", a, b, c); // 출력: 5 5 5
}
✔️ 대입 연산(=)은 오른쪽에서 왼쪽(Right to Left)으로 실행됨
🚀 정리
- 산술(* / % + -) → 비교(> < ==) → 논리(&& ||) → 대입(=) 순으로 우선순위
- 대부분 연산자는 좌→우 결합, 대입 연산자는 우→좌 결합
- 괄호 ()를 사용하면 우선순위를 명확하게 지정 가능!
✅ 복잡한 식을 다룰 때는 괄호를 적극적으로 활용하면 실수를 줄일 수 있습니다! 🎯
'정보처리기사' 카테고리의 다른 글
| C언어 - 함수 (0) | 2025.03.27 |
|---|---|
| C 언어 - 1차원 배열, 2차원 배열, 문자열 동시 사용 (0) | 2025.03.26 |
| C 언어 - 1차원 배열 & 2차원 배열 (0) | 2025.03.26 |
| C언어 - 반복문 (0) | 2025.03.26 |
| C언어 - 조건문 (0) | 2025.03.26 |