-
연산식과 다양한 연산자
연산식과 연산자 분류
- 연산식 (expression)
- 변수와 다양한 리터럴 상수 그리고 함수의 호출 등으로 구성되는 식
- 항상 하나의 결과값을 갖는다.
- 연산자 (operator) : + - * /
- 이미 정의된 연산을 수행하는 문자 또는 문자조합 기호
- 피연산자 (operand)
- 연산(operation)에 참여하는 변수나 상수
(출처: Perfect C,강환수,강환일,이동규지음(인피니티북스))
다양한 연산자
- 단(일)항(unary), 이항(binary), 삼항(ternary) 연산자
- 연산자는 연산에 참여하는 피연산자(operand)의 갯수에 따라 구분
- 부호를 표시하는 +, -는 단항연산자
- 덧셈, 뺄셈의 +, -, *, / 등의 연산은 이항연산자
- 삼항연산자는 조건연산자 ' ? : '가 유일
- 연산자는 연산에 참여하는 피연산자(operand)의 갯수에 따라 구분
- 단항연산자
- 연산자의 위치에 따라 전위와 후위로 나뉜다.
- ++ a : 전위, 연산자가 앞에 있는 전위(prefix) 연산자
- a ++ : 후위, 연산자가 뒤에 있는 후위(postfix) 연산자
- 연산자의 위치에 따라 전위와 후위로 나뉜다.
단항 연산자 연산자 | 피연산자 (전위:prefix) ++a : 전위 증가연산자 sizeof(int) : sizeof 연산자 (int) 3.46 : 자료형 변환연산자 -3 : 부호연산자 피연산자 | 연산자 (후위:postfix) b-- : 후위 감소연산자 a++ : 후위 증가연산자
이항 연산자 피연산자1 | 연산자 | 피연산자2 a % 3 3 && 4 5 >= 7
삼항 연산자 피연산자1 ? 피연산자2 : 피연산자3 (5 >= 7) ? (3+5) : (10/2)
산술연산자와 부호연산자
- 산술연산자 : +, -, *, /, %
- % 나머지(remainder, modulus) 연산자
- 피연산자로 정수만 가능
- 나누기 연산식 10 / 4는 연산값이 2
- 정수끼리의 나누기 연산(/) 결과는 소수 부분을 버린 정수
- 실수끼리의 연산 10.0 / 4.0 결과는 2.5
- 나머지 연산식 a % b
- 결과는 a를 b로 나눈 나머지 값
- %의 피연산자는 반드시 정수
- 실수이면 오류 발생
- % 나머지(remainder, modulus) 연산자
3 / 2 * 2 → 연산값: 2 먼저 계산하는 3/2가 1이므로 전체 연산값은 2 3 / (2 * 2) → 연산값: 0
- 부호 연산자: 단항 연산자
- 연산식 +3, -4.5, -a
- 수, 변수의 부호로 표기하는 연산자
연산식 설명 연산값 연산식 설명 연산값 - a 부호연산자 10 - b + 2.5 부호연산자 0.0 2 - a 빼기연산자 -3 a / b + b * 2 ( a / b ) + ( b * 2 ) 5.0 2 * a + 3 ( 2 * a ) + 3 13 a * 2 / b - a ( ( a * 2 ) / b ) - a -1.0 10 - a / 2 10 - ( a / 2 ) 8 a + b * 2 / a a + ( ( b * 2 ) / a ) 6.0 10 % a + 10 / a (10 % a) + (10 / a) 2 a % b 실수는 %에 오류 오류 #include <stdio.h> int main(void) { int a, b, c; a = b = c = 5; printf("a = a + 2 → %d\n", a = a + 2); printf("a → %d\n\n", a); printf("a = b + c → %d\n", a = b + c); printf("a → %d", a); return 0; }
a = a + 2 → 7 //대입연산자의 결합성은 오른쪽에서 왼쪽으로 수행 a → 7 a = b + c → 10 //대입연산식의 연산값은 대입된 저장값 a → 10
대입연산자 (assignment operator) =
- 오른쪽의 연산식 exp의 결과값을 왼쪽 변수 var에 저장하는 연산자
- 오른쪽을 의미하는 right 단어에서 r-value
- 대입연산자의 왼쪽 부분에는 반드시 하나의 변수만이 올 수 있음
- 하나의 변수를 왼쪽을 의미하는 left 단어에서 l-value
대입연산자 수행 방법 (출처: Perfect C,강환수,강환일,이동규지음(인피니티북스)) - a = b = c = 5 와 같은 중첩된 대입문
- 대입연산자의 결합성이 '오른쪽에서 왼쪽(←)'이므로 많은 변수에 동일한 값을 한 번에 대입
- 즉 변수 a, b, c 모두 값 5 저장
- 연산값은 마지막으로 a에 저장된 값인 5
int a, b, c; a = b = c = 5 ; → (a = (b = (c = 5)))
축약 대입연산자 =
- +=, -=, *=, /=, %=
- 산술연산자와 대입연산자를 이어 붙인 연산자
- 대입연산식 a = a + b을 중복된 a를 생략하고 간결하게 a += b
축양 대입연산자의 연산 방법 (출처: Perfect C,강환수,강환일,이동규지음(인피니티북스)) #include <stdio.h> #include <math.h> #define _CRT_SECURE_NO_WARNINGS #pragma warning (disable:4996) int main() { int a, b; printf("number:"); scanf("%d", &a); printf("number for +:"); scanf("%d", &b); printf("number is %d\n", a += b); printf("number for -:"); scanf("%d", &b); printf("number is %d\n", a -= b); printf("number for *:"); scanf("%d", &b); printf("number is %d\n", a *= b); printf("number for /:"); scanf("%d", &b); printf("number is %d", a /= b); return 0; }
number:8 number for +:5 number is 13 number for -:7 number is 6 number for *:5 number is 30 number for /:3 number is 10
증가 감소 연산자
- 증가연산자 ++
- 변수값을 각각 1 증가
- n++ : 후위(postpix)
- 1 증가되기 전 값이 연산 결과값
- ++n : 전위(prepix)
- 1 증가된 값이 연산 결과값
- n++ : 후위(postpix)
- 변수값을 각각 1 증가
- 감소연산자 --
- 변수값을 각각 1 감소
- n-- : 후위(postpix)
- 1 감소되기 전 값이 연산 결과값
- --n : 전위(prepix)
- 1 감소된 값이 연산 결과값
- n-- : 후위(postpix)
- 변수값을 각각 1 감소
- 주의
- 연산자 기호 중간에 공백이 들어갈 수 없다.
- 증감연산자는 변수만을 피연산자로 사용할 수 있다.
- 상수나 일반 수식을 피연산자로 사용할 수 없다.
- ex) ++300;, (a+1)--;
- a = ++a * a-- 하나의 연산식에 동일한 변수의 증감연산자를 사용하면 값은 나오나 사용하지 않기.
#include <stdio.h> int main() { int m, n; m = n = 3; printf("m++ ++n : %d %d\n", m++, ++n); printf("m n : %d %d\n", m, n); printf("m-- --n : %d %d\n", m--, --n); printf("m n : %d %d", m, n); return 0; }
m++ ++n : 3 4 m n : 4 4 m-- --n : 4 3 m n : 3 3
'C' 카테고리의 다른 글
[C] 연산자② - 관계와 논리, 조건과 비트연산자 (0) 2023.04.01 [c] 조건 (0) 2023.03.29 [C] 전처리와 입출력 (1) 2023.03.17 [C] QUIZ (0) 2023.03.15 [C] C 프로그래밍 첫걸음 (4) 2023.03.08 - 연산식 (expression)