몽-구
몽구의 우당탕탕 개발 공부
몽-구
전체 방문자
오늘
어제
  • 분류 전체보기 (106)
    • PS (38)
      • 백준 (24)
      • 프로그래머스 (14)
    • Dev (58)
      • Kotlin (0)
      • Java (4)
      • Spring, SpringBoot (1)
      • C (8)
      • Python (10)
      • Dart (1)
      • 알고리즘 (7)
      • 자료구조 (3)
      • Git (1)
      • Linux (2)
      • VS Code (1)
      • 환경 설정 (8)
      • Conference (1)
      • 42Seoul (3)
      • Node.js (1)
      • ShellScript (1)
      • IntelliJ (0)
      • MacOS (2)
      • 기타 (3)
    • CS (1)
      • 데이터베이스 (1)
    • DS (4)
      • Coursera (4)
    • 리뷰 (1)
      • 제품 리뷰 (1)
    • 일상 (3)
      • 자동화 (1)
      • 목표 및 계획 (2)
      • 회고 (0)
    • 삶에 대한 태도 (1)
      • 유튜브를 보며 (1)

블로그 메뉴

  • GitHub

인기 글

반응형

태그

  • 백준온라인저지
  • Python
  • Algorithm
  • Linux
  • 백준
  • c언어
  • 정렬
  • sort
  • 코딩테스트
  • 리눅스
  • 프로그래머스
  • 알고리즘
  • 파이썬
  • 백준알고리즘
  • BOJ

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
몽-구

몽구의 우당탕탕 개발 공부

[C언어] 코드로 알아보는 산술 연산자
Dev/C

[C언어] 코드로 알아보는 산술 연산자

2020. 6. 26. 12:25
반응형

산술 연산자 정리

연산자 설명
+ 덧셈
- 뺄셈
* 곱셈
/ 나눗셈 (몫)
% 나머지
++ 증가 연산자.
변수 = 변수 + 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

C언어 코딩 도장 : 핵심 정리

반응형
저작자표시 (새창열림)

'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
    'Dev/C' 카테고리의 다른 글
    • [C언어] 함수 매개변수 앞에 const?
    • [C언어] scanf 정리
    • [C언어] 변수와 자료형, 그리고 상수
    • [C언어] 문자 자료형과 아스키 코드(ASCII)
    몽-구
    몽-구
    소망보단 목표를, 생각보단 실천을

    티스토리툴바