반응형
산술 연산자 정리
연산자 | 설명 |
+ | 덧셈 |
- | 뺄셈 |
* | 곱셈 |
/ | 나눗셈 (몫) |
% | 나머지 |
++ | 증가 연산자. 변수 = 변수 + 1 (전위/후위 구분 있으니 아래 코드 참고) |
-- | 감소 연산자. 변수 = 변수 - 1 (전위/후위 구분 있으니 아래 코드 참고) |
printf 함수 내에서 산술 연산
# include <stdio.h>
int main()
{
int a = 20;
int b = 10;
printf("<현재 a = %d, b = %d>\n\n", a, b);
printf("a + b = %d\t", a+b); // a + b = 20 + 10 = 30
printf("현재 a = %d, b = %d\n", a, b);
printf("a - b = %d\t", a-b); // a - b = 20 - 10 = 10
printf("현재 a = %d, b = %d\n", a, b);
printf("a * b = %d\t", a*b); // a * b = 20 * 10 = 200
printf("현재 a = %d, b = %d\n", a, b);
printf("a / b = %d\t", a/b); // a / b = 20 / 10 = 2
printf("현재 a = %d, b = %d\n", a, b);
printf("a %% b = %d\t", a%b); // a % b = 0 (나머지는 0)
printf("현재 a = %d, b = %d", a, b);
return 0;
}
/**************** 결과 ****************
<현재 a = 20, b = 10>
a + b = 30 현재 a = 20, b = 10
a - b = 10 현재 a = 20, b = 10
a * b = 200 현재 a = 20, b = 10
a / b = 2 현재 a = 20, b = 10
a % b = 0 현재 a = 20, b = 10
**************************************/
printf 함수 안에서 산술 연산이 일어난 뒤 출력된다. 하지만 변수 a와 b에 담겨있는 값은 변화가 일어나지 않는다.
산술 연산자를 이용한 할당 후 출력
# include <stdio.h>
int main()
{
int a = 20;
int b = 10;
printf("<현재 a = %d, b = %d>\n\n", a, b);
a += b; // a = a + b = 20 + 10 = 30. a에 30을 할당.
printf("a += b 이후, a = %d\t", a);
printf("현재 a = %d, b = %d\n", a, b);
a -= b; // a = a - b = 30 - 10 = 20. a에 20을 할당.
printf("a -= b 이후, a = %d\t", a);
printf("현재 a = %d, b = %d\n", a, b);
a *= b; // a = a * b = 20 * 10 = 200. a에 200을 할당.
printf("a *= b 이후, a = %d\t", a);
printf("현재 a = %d, b = %d\n", a, b);
a /= b; // a = a / b = 200 / 10 = 20. a에 20을 할당.
printf("a /= b 이후, a = %d\t", a);
printf("현재 a = %d, b = %d\n", a, b);
a %= b; // a = a % b = 20 % 10 = 0. a에 0을 할당.
printf("a %%= b 이후, a = %d\t", a);
printf("현재 a = %d, b = %d", a, b);
return 0;
}
/**************** 결과 ****************
<현재 a = 20, b = 10>
a += b 이후, a = 30 현재 a = 30, b = 10
a -= b 이후, a = 20 현재 a = 20, b = 10
a *= b 이후, a = 200 현재 a = 200, b = 10
a /= b 이후, a = 20 현재 a = 20, b = 10
a %= b 이후, a = 0 현재 a = 0, b = 10
**************************************/
각종 산술 연산자를 통해 직접 할당을 한 뒤 출력하는 것은 당연한 말이지만 실제 변수 a와 b에 담긴 값에 영향을 준다.
증가 연산자 / 감소 연산자를 활용한 출력
# include <stdio.h>
int main()
{
int a = 0;
printf("<현재 a = %d>\n\n", a);
printf("a = %d\n", a++); // a를 출력한 후 a를 1 증가.
// 0이 출력되고, 0이었던 a는 1이 됨.
printf("a = %d\t", a);
printf("할당 연산자 '='가 없이도 a가 1 증가. 현재 a = %d\n\n", a);
printf("a = %d\n", a--); // a를 출력한 후 a를 1 감소.
// 1이 출력되고, 1이었던 a는 0이 됨.
printf("a = %d\t", a);
printf("할당 연산자 '='가 없이도 a가 1 감소. 현재 a = %d\n\n\n", a);
printf("a = %d\t", ++a); // 0이었던 a가 1 증가된 후 출력됨.
printf("할당 연산자 '='가 없이도 a가 1 증가. 현재 a = %d\n", a);
printf("a = %d\n\n", a); // 변화 없음.
printf("a = %d\t", --a); // 1이었던 a가 1 감소된 후 출력됨.
printf("할당 연산자 '='가 없이도 a가 1 감소. 현재 a = %d\n", a);
printf("a = %d", a); // 변화 없음.
return 0;
}
/************************ 결과 ************************
<현재 a = 0>
a = 0
a = 1 할당 연산자 '='가 없이도 a가 1 증가. 현재 a = 1
a = 1
a = 0 할당 연산자 '='가 없이도 a가 1 감소. 현재 a = 0
a = 1 할당 연산자 '='가 없이도 a가 1 증가. 현재 a = 1
a = 1
a = 0 할당 연산자 '='가 없이도 a가 1 감소. 현재 a = 0
a = 0
******************************************************/
전위 증가 연산자는 변수의 앞에 붙어서 ++a와 같은 형태를 가지며, 출력이 일어나기 전에 먼저 a를 증가시킨다. 반면, 후위 증가 연산자는 변수의 뒤에 붙어서 a++와 같은 형태를 가지며, 출력 이후 a를 증가시킨다. 감소 연산자도 전위/후위의 개념은 동일하다.
증가 연산자 / 감소 연산자를 활용한 할당 & 산술 연산
# include <stdio.h>
int main()
{
int a = 10;
int b = 20;
printf("<현재 a = %d, b = %d>\n\n", a, b);
a = b++; // a에게 b를 먼저 할당시킨 후, b가 1 증가.
printf("a = b++ 연산 이후, 현재 a = %d, b = %d\n\n", a, b);
a = ++b; // b를 먼저 1 증가시킨 후, a에게 할당.
printf("a = ++b 연산 이후, 현재 a = %d, b = %d\n\n", a, b);
a += ++b; // a = a + (++b) = a + 증가된 b
printf("a += ++b 연산 이후, 현재 a = %d, b = %d\n\n", a, b);
a += b++; // a = a + (b++) => a + b가 a에 할당되고 b는 1 증가.
printf("a += b++ 연산 이후, 현재 a = %d, b = %d", a, b);
return 0;
}
/****************** 결과 ******************
<현재 a = 10, b = 20>
a = b++ 연산 이후, 현재 a = 20, b = 21
a = ++b 연산 이후, 현재 a = 22, b = 22
a += ++b 연산 이후, 현재 a = 45, b = 23
a += b++ 연산 이후, 현재 a = 68, b = 24
******************************************/
실제로 개발을 할 때 16번부터 20번 라인처럼 코딩하는 사람은 진짜... 본 적도 없고 존재해서도 안 될 것이다. 하지만 연산자 우선순위를 물어보는 취지로 대학교 시험 정도에는 나올 법한 느낌이다.
아무튼!
할당도 출력과 마찬가지로 전위에 연산자가 존재할 경우,
연산자가 붙은 변수에 담긴 값을 먼저 증가/감소시키고 -> 해당 값을 할당하고자 하는 변수에 할당한다.
반대로 후위에 연산자가 존재할 경우,
먼저 연산자가 붙은 변수에 담긴 값을 다른 변수에 할당시킨 후 -> 연산자가 붙은 변수에 담긴 값을 증가/감소시킨다.
Source
반응형
'Dev > C' 카테고리의 다른 글
[C언어] 함수 매개변수 앞에 const? (0) | 2020.10.20 |
---|---|
[C언어] scanf 정리 (0) | 2020.06.25 |
[C언어] 변수와 자료형, 그리고 상수 (0) | 2020.06.20 |
[C언어] 문자 자료형과 아스키 코드(ASCII) (1) | 2020.06.19 |
[C언어] 실수형 변수 출력 시 소수점 자릿수 조절 (반올림/올림/내림) (0) | 2020.06.17 |