1. 수식과 연산자 개요
1-1. 연산자
- 데이터를 가공하고 처리하기 위한 가장 기본 도구
- 연산 종류에 따른 분류 : 산술 연산자, 관계 연산자, 논리 연산자, 증감 연산자, 비트 연산자, 대입 연산자, 조건 연산자 등
- 피연산자 개수에 따른 분류 : 단항 연산자, 이항 연산자, 삼항 연산자
1-2. 수식
- 피연산자들과 연산자의 조합으로 어떠한 값을 갖는 요소
num = 10;			
num1 = num;			
num2 = num + 1;		
2. 산술 연산자
2-1. 산술 연산자 종류
| 연산자 | 정수 연산 | 부동소수 연산 | 
|---|
| + | 더하기 | 더하기 | 
| - | 빼기 | 빼기 | 
| * | 곱하기 | 곱하기 | 
| / | 몫 | 실수 나눗셈 | 
| % | 나머지 | (정의 되지 않음) | 
2-2. 연산 순서
- 연산자 우선순위 : *,/,%>+,-
- 결합 수칙 : 왼쪽에서 오른쪽 방향으로 적용
2-3. 산술 연산과 자료형
- 연산 결과도 자료형이 정해져 있어야 함
- 산술 연산의 경우 피연산자의 자료형에 따라 연산 결과값의 자료형이 결정됨
- 정수형과 정수형 → 정수형
- 부동소수형과 부동소수형 → 부동소수형
- 정수형과 부동소수형 → 부동소수형
 
- 앞의 규칙은 연산자 별로 적용
- 앞의 규칙은 변수에도 동일하게 적용
2-4. 피연산자가 모두 정수형인데, 부동소수 연산을 하고 싶으면?
3. 대입 연산자
3-1. 대입 연산자 =
- 연산자 오른쪽 수식의 값을 왼쪽 변수에 대입(수학의 등호와 완전히 다른 의미)
변수 = 수식
 
3-2. 연속 대입
- 대입 연산의 결과는 왼쪽 변수에 저장되는 값
- 이를 이용하면 대입을 연속적으로 수행할 수 있음
 a = b = c = 2;이 문장의 의미는
 c = 2;
 b = c;
 a = b;
3-3. 복합 대입 연산자
: 대입 연산자와 산술 연산자의 결합
| 복합 대입 연산 | 동일 대입문 | 
|---|
| a += x | a = a + (x) | 
| a -= x | a = a - (x) | 
| a *= x | a = a * (x) | 
| a /= x | a = a / (x) | 
| a %= x | a = a % (x) | 
3-4. 증감 연산자
- 변수의 값을 1씩 증가(++) 혹은 감소(--) 시키는 단항 연산자
| 증감 연산 | 의미 | 
|---|
| ++a | a의 값 1 증가 -> a의 값 사용 | 
| --a | a의 값 1 감소 -> a의 값 사용 | 
| a++ | a의 값 사용 -> a의 값 1 증가 | 
| a-- | a의 값 사용 -> a의 값 1 감소 | 
4. 관계 연산자
4-1. 관계 연산자
- 왼쪽과 오른쪽의 대소 관계를 비교하는 연산자
- 연산의 결과가 참이면 1이고 거짓이면 0
- C언어에서는 0이 아닌 값은 모두 참으로 간주
 
| 관계 연산 | 의미 | 
|---|
| x == y | x의 값과 y의 값이 같다 | 
| x != y | x와 y가 같지 않다 | 
| x < y | x가 y 보다 작다 | 
| x <= y | x가 y 보다 작거나 같다 | 
| x > y | x가 y 보다 크다 | 
| x >= y | x가 y 보다 크거나 같다 | 
4-2. 관계 연산자와 산술 연산자의 우선순위
4-3. 주의) 수식 4 < 5 < 2 의 결과는?
- 수학적 의미
 : 5는 4보다 크고 2보다 작다 (거짓)
- C언어에서의 의미
 : 4 < 5 < 2 → (4 < 5) < 2 → 1 < 2 → 수식 결과 : 참(1)
5. 논리 연산자
5-1. 논리 연산자
| 논리 연산 | 의미 | 연산 결과 | 
|---|
| !x | 논리부정(NOT) | x가 참이면 거짓, 거짓이면 참 | 
| x && y | 논리곱(AND) | x, y가 둘 다 참이면 참, 그렇지 않으면 거짓 | 
| x ││ y | 논리합(OR) | x, y 중 하나라도 참이면 참, 그렇지 않으면 거짓 | 
5-2. 논리 연산자의 연산 순서
- 우선순위 : !>&&>||
- 우선순위가 같은 경우 왼쪽부터 계산
- 우선순위를 무시하려면 괄호 사용
5-3. 논리 연산자와 관계/산술 연산자의 우선순위
6. 그 외 연산자
6-1. 조건 연산자
- if ~ else 문을 대신하여 사용할 수 있는 연산자
- 피연산자 수가 3개인 삼항 연산자
조건 ? A : B
- 조건이 true인 경우, 결과 값은 A
- 조건이 false인 경우, 결과 값은 B
 
 
6-2. 콤마 연산자
a = b + 3, b = 2, b += a;
6-3. sizeof 연산자
- 저장 공간의 크기를 바이트 단위로 계산
 sizeof(char)의 결과 값 1 (괄호 필수)
 sizeof(3.14)또는sizeof 3.14의 결과 값 8
 sizeof(num)또는sizeof num의 결과 값 4 (num이 int 형 변수일 때)
6-4. 형변환 연산자 : 명시적 형변환을 위해 사용
- x = (double) a/b;→ a의 자료형을 부동 소수로 변환
- x = (double) (a/b);→ a/b의 결과 값을 부동 소수로 변환
7. 연산자 우선순위와 결합수칙
7-1. 연산자 우선순위
- 여러 연산자가 함께 사용된 경우 우선순위에 의존
- 다른 순서로 연산을 하고 싶은 경우 괄호를 이용
7-2. 결합수칙
- 연산의 순서를 나타냄
- 연산자 우선순위가 같은 경우 결합수칙에 의존
| 순위 | 연산자 | 종류 | 결합수칙 | 
|---|
| 1 | () [] . -> | 멤버 | 왼쪽 우선 | 
| 2 | + - ++ -- ! ~ * & sizeof (자료형) | 단항 | 오른쪽 우선 | 
| 3 | * % / | 산술 | 왼쪽 우선 | 
| 4 | + - | 산술 | 왼쪽 우선 | 
| 5 | << >> | 비트(이동) | 왼쪽 우선 | 
| 6 | < > <= >= | 관계 | 왼쪽 우선 | 
| 7 | == != | 관계 | 왼쪽 우선 | 
| 8 | & | 비트(논리) | 왼쪽 우선 | 
| 9 | ^ | 비트(논리) | 왼쪽 우선 | 
| 10 | | | 비트(논리) | 왼쪽 우선 | 
| 11 | && | 논리 | 왼쪽 우선 | 
| 12 | || | 논리 | 왼쪽 우선 | 
| 13 | ?: | 조건 | 오른쪽 우선 | 
| 14 | = += -= *= %= /= ^= <<= >>= | 대입 | 오른쪽 우선 | 
| 15 | , | 콤마 | 왼쪽 우선 |