A. 연산자(operator)
1. 연산자
a. 연산자란?
🌟 프로그램의 산술식이나 연산식을 표현하고 처리하기 위해 제공되는 다양한 기호
b. 연산자의 종류
1) 산술 연산자
2) 대입 연산자
3) 증감 연산자
4) 비교 연산자
5) 논리 연산자
6) 비트 연산자
7) 기타 연산자
c. 연산자의 우선순위(operator precedence)와 결합 방향(associativity)
1) 연산자의 우선순위
수식 내에 여러 연산자가 함께 등장할 때, 어느 연산자가 먼저 처리될 것인가를 결정하는 것
2) 연산자의 결합 방향
수식 내에 우선순위가 같은 연산자가 둘 이상 있을 때, 먼저 어느 연산을 수행할 것인가를 결정
3) 연산자의 우선순위표 (참조표)
- 우선순위가 빠른 연산자가 가장 먼저 실행
- 같은 우선순위를 가지는 연산자가 둘 이상 있을 때에는 결합 순서에 따라 실행 순서가 결정
- ➡ (왼쪽에서 오른쪽으로) / 👈 (오른쪽에서 왼쪽으로)
우선순위 | 연산자 | 설명 | 결합 방향 |
1 | ++ | 후위 증가 연산자 | ➡ |
-- | 후위 감소 연산자 | ➡ | |
() | 함수 호출 | ➡ | |
[] | 첨자 연산자 | ➡ | |
. | 참조에 의한 선택 | ➡ | |
-> | 포인터를 통한 선택 | ➡ | |
2 | ! | 논리 NOT 연산자 | 👈 |
~ | 비트 NOT 연산자 | 👈 | |
+ | 양의 부호 (단항 연산자) | 👈 | |
- | 음의 부호 (단항 연산자) | 👈 | |
++ | 전위 증가 연산자 | 👈 | |
-- | 전위 감소 연산자 | 👈 | |
(타입) | 타입 캐스트 연산자 | 👈 | |
* | 참조 연산자 (단항 연산자) | 👈 | |
& | 주소 연산자 (단항 연산자) | 👈 | |
sizeof | 크기 | 👈 | |
3 | * | 곱셈 연산자 | ➡ |
/ | 나눗셈 연산자 | ➡ | |
% | 나머지 연산자 | ➡ | |
4 | + | 덧셈 연산자 (이항 연산자) | ➡ |
- | 뺄셈 연산자 (이항 연산자) | ➡ | |
5 | << | 비트 왼쪽 시프트 연산자 | ➡ |
>> | 부호 비트를 확장하면서 비트 오른쪽 시프트 | ➡ | |
6 | < | 관계 연산자(보다 작은) | ➡ |
<= | 관계 연산자(보다 작거나 같은) | ➡ | |
> | 관계 연산자(보다 큰) | ➡ | |
>= | 관계 연산자(보다 크거나 같은) | ➡ | |
7 | == | 관계 연산자(와 같은) | ➡ |
!= | 관계 연산자(와 같지 않은) | ➡ | |
8 | & | 비트 AND 연산자 | ➡ |
9 | ^ | 비트 XOR 연산자 | ➡ |
10 | | | 비트 OR 연산자 | ➡ |
11 | && | 논리 AND 연산자 | ➡ |
12 | || | 논리 OR 연산자 | ➡ |
13 | ? : | 삼항 조건 연산자 | 👈 |
14 | = | 대입 연산자 및 복합 대입 연산자 (=, +=, -=, *=, /=, %=, <<=, >>=, &=, ^=, |=) |
👈 |
15 | , | 쉼표 연산자 | ➡ |
2. 산술 연산자(arithmetic operator)
a. 산술 연산자란?
🌟 사칙연산을 다루는 연산자
b. 산술 연산의 특징
- 두 개의 피연산자를 가지는 이항 연산자
- 피연산자들의 결합 방향 : ➡
🧡 항이란?
해당 연산의 실행이 가능하기 위해 필요한 값이나 변수를 의미
즉, 이항 연산자란 해당 연산의 실행을 위해서 두 개의 값이나 변수가 필요한 연산자를 의미
c. 산술 연산의 종류
산술연산자 | 설명 | 예시 int a = 7; int b = 6 |
+ | 왼쪽 값에서 오른쪽 값을 더함 | a + b = 13 |
- | 왼쪽 값에서 오른쪽 값을 뺌 | a - b = 1 |
* | 왼쪽 값에서 오른쪽 값을 곱함 | a * b = 42 |
/ | 왼쪽 값을 오른쪽 값으로 나눔 | a / b = 1 |
% | 왼쪽 값을 오른쪽 값으로 나눈 나머지를 반환함 | a / b = 1 |
3. 대입 연산자(assignment operator)
a. 대입 연산자란?
🌟 변수에 값을 대입할 때 사용
b. 대입 연산의 특징
- 두 개의 피연산자를 가지는 이항 연산자
- 피연산자들의 결합 방향 : 👈
- 산술 연산자와 결합한 다양한 복합 대입 연산자가 존재
c. 대입 연산자의 종류
대입 연산자 | 설명 | 예제 int a = 10; |
= | 왼쪽 값에 오른쪽 값을 대입 | a = 3 // a = 3 |
+= | 왼쪽 값에 오른쪽 값을 더한후, 그 결괏값을 왼쪽 값에 대입 | a+=3 // a = 13 |
-= | 왼쪽 값에 오른쪽 값을 뺀 후, 그 결괏값을 왼쪽 값에 대입 | a-=3 // a = 7 |
*= | 왼쪽 값에 오른쪽 값을 곱한 후, 그 결괏값을 왼쪽 값에 대입 | a*=3 // a = 30 |
/= | 왼쪽 값에 오른쪽 값을 나눈 후, 그 결괏값을 왼쪽 값에 대입 | a/=3 // a = 3 |
%= | 왼쪽 값에 오른쪽 값을 나눈 후, 그 나머지를 왼쪽 값에 대입 | a%=3 // a = 1 |
4. 증감연산자 (increment and decrement operator)
a. 증감연산자란?
🌟 피연산자를 1씩 증가 혹은 1씩 감소시킬 때 사용하는 연산자
b. 증감 연산의 특징
- 피연산자가 단 하나뿐인 단항 연산자
- 해당 연산자가 피연산자의 어느 쪽에 위치하는가에 따라 연산의 순서 및 결과가 달라짐
- 증감 연산된 변수의 값은 변경된다
c. 증감 연산자의 종류
증감 연산자 | 설명 |
++x | 먼저 값을 1 증가 후, 해당 연산 진행 |
x++ | 해당 연산 후, 값을 1 증가 |
--x | 먼저 값을 1 감소 후, 해당 연산 진행 |
x-- | 해당 연산 후, 값을 1 감소 |
d. 증감 연산자의 연산 순서
1) 항이 두개인 경우
값이 더해지기 전에 대입 연산이 실행된다 (result02의 경우)
🤓 예제
int num01 = 7;
int num02 = 7;
int result01, result02;
result01 = (++num01) - 5;
result02 = (num02++) - 5;
printf("전위 증가 연산자에 의한 결괏값은 %d이고, 변수의 값은 %d로 변했습니다.\n", result01, num01);
printf("후위 증가 연산자에 의한 결괏값은 %d이고, 변수의 값은 %d로 변했습니다.\n", result02, num02);
✨ 실행결과
전위 증가 연산자에 의한 결괏값은 3이고, 변수의 값은 8로 변했습니다.
후위 증가 연산자에 의한 결괏값은 2이고, 변수의 값은 8로 변했습니다. //값이 더해지기 전에 대입 연산이 실행되어 2
2) 항이 세 개 이상인 경우
🤓 예제
int x = 10;
int y = x-- + 5 + --x;
printf("변수 x의 값은 %d이고, 변수 y의 값은 %d입니다.\n", x, y);
✨ 실행결과
변수 x의 값은 8이고, 변수 y의 값은 23입니다.
📝 예제 설명
① : 덧셈 연산이 먼저 수행 (10 + 5)
② : x의 감소 연산이 수행 (x의 값 : 9)
③ : 감소연산 수행 (x의 값 : 8)
④ : 덧셈 연산이 수행 (15 + 8)
⑤ : 마지막으로 대입 연산이 수행 (y의 값 : 23)
출처 : http://www.tcpschool.com/c/c_operator_arithmetic
'프로그래밍 언어 > C' 카테고리의 다른 글
C 제어문 총정리 (조건문, 반복문, 기타 제어문) (0) | 2023.08.17 |
---|---|
C 연산자 총정리 -2 (비교, 논리, 비트, 기타 등) (0) | 2023.08.16 |
[자료형(data type)] 기본형 총정리 (0) | 2023.08.16 |
C 상수 총정리 (0) | 2023.08.16 |
C(++) 변수 총정리 (0) | 2023.08.16 |