연산자
C 언어에서 연산자(Operator)는 변수나 상수에 대해 산술, 비교, 논리, 대입, 비트 등의 연산을 수행하는 기호입니다. 프로그램이 조건을 판단하거나 계산을 수행하는 데 있어 핵심적인 역할을 합니다. 각 연산자는 특정한 용도와 우선순위를 가지며, 다양한 조합을 통해 복잡한 로직을 구현할 수 있습니다.
산술 연산자
산술 연산자는 덧셈, 뺄셈, 곱셈, 나눗셈, 나머지 등의 기본적인 수학 연산을 수행할 때 사용됩니다. C 언어에서는 정수형(int), 실수형(float, double) 간의 산술 연산을 지원합니다.
+: 덧셈-: 뺄셈*: 곱셈/: 나눗셈%: 나머지(정수형에만 사용 가능)
int a = 10, b = 4;
int sum = a + b; // 14
int diff = a - b; // 6
int mul = a * b; // 40
int div = a / b; // 2
int mod = a % b; // 2
주의: 정수형 나눗셈은 소수점 이하를 버립니다. 나머지 연산자는 실수형에는 사용할 수 없습니다.
관계 연산자
관계 연산자는 두 값을 비교하여 true(1) 또는 false(0)의 결과를 반환합니다. 조건문(if, while 등)에서 자주 사용됩니다.
==: 같다!=: 같지 않다>: 크다<: 작다>=: 크거나 같다<=: 작거나 같다
int x = 5, y = 10;
if (x != y) {
printf("x와 y는 다릅니다.\n");
}
비교 결과는 항상 정수형 1(참) 또는 0(거짓)으로 반환되며, 논리 연산자와 함께 조건문에서 많이 사용됩니다.
논리 연산자
논리 연산자는 여러 조건을 결합하거나 조건의 참/거짓을 뒤집는 데 사용됩니다.
&&: 논리 AND (두 조건 모두 참이면 참)||: 논리 OR (하나라도 참이면 참)!: 논리 NOT (참을 거짓으로, 거짓을 참으로)
int a = 1, b = 0;
if (a || b) {
printf("하나 이상 참입니다.\n");
}
논리 연산자는 조건문, 반복문에서 필수적으로 사용되며, 복합 조건식을 표현할 때 유용합니다.
대입 연산자
대입 연산자는 변수에 값을 저장하는 데 사용됩니다. 기본적인 대입 외에도, 기존 값을 기반으로 경신하는 복합 대입 연산자도 제공됩니다.
=: 대입+=: 덧셈 후 대입-=: 뺄셈 후 대입*=: 곱셈 후 대입/=: 나눗셈 후 대입%=: 나머지 후 대입
int a = 10;
a *= 2; // a = a * 2; 결과: 20
복합 대입 연산자는 코드의 가독성과 효율성을 높이는 데 유리합니다.
비트 연산자
비트 연산자는 이진수 수준에서 연산을 수행합니다. 하드웨어 제어, 플래그 조작 등 시스템 프로그래밍에서 많이 사용됩니다.
&: 비트 AND|: 비트 OR^: 비트 XOR~: 비트 NOT<<: 왼쪽 시프트>>: 오른쪽 시프트
unsigned char val = 0b00001111;
unsigned char result = val << 2; // 0b00111100
비트 연산자는 메모리를 절약하거나 빠른 계산이 필요한 경우에 활용됩니다.
연산자 우선순위
C 언어는 여러 연산자가 혼합되어 있을 때 어떤 순서로 계산할지를 결정하는 연산자 우선순위를 정의합니다. 우선순위가 높을수록 먼저 계산됩니다. 또한 결합 방향(Associativity)도 중요한데, 왼쪽에서 오른쪽(Left-to-Right), 또는 그 반대로 계산되는지를 나타냅니다.
- 1순위:
()괄호,++/--후위 - 2순위:
+/-단항,!부정,~비트 NOT - 3순위:
*,/,% - 4순위:
+,-(이항) - 5순위: 관계 연산자
<,>,<=,>= - 6순위:
==,!= - 7순위: 비트 연산자
&,|,^ - 8순위: 논리 연산자
&&,|| - 9순위: 대입 연산자
=,+=등 (오른쪽에서 왼쪽)
int a = 10, b = 5, c = 2;
int result = a + b * c; // 곱셈이 먼저 수행됨: 10 + (5 * 2) = 20
복잡한 수식일수록 괄호 ()를 적극 활용하여 의도를 명확히 하는 것이 좋습니다. 연산자 우선순위를 숙지하면 버그를 줄이고 정확한 연산을 구현할 수 있습니다.
'Programming' 카테고리의 다른 글
| C 동적 메모리 할당 (80) | 2025.08.11 |
|---|---|
| C 제어문 (67) | 2025.08.10 |
| C 변수와 자료형 (57) | 2025.08.08 |
| C 기본 문법 (43) | 2025.08.07 |
| C 역사와 특징 (57) | 2025.08.06 |