본문 바로가기

Study_C, C++/홍정모의 따라하며 배우는 C언어

[홍정모의 따라하며 배우는 C언어] 5.6 연산자 우선순위와 표현식 트리 ~ 5.8 증가, 감소 연산자

728x90

5.6 연산자 우선순위와 표현식 트리

  • 사칙연산 우선순위는 수학 계산 순서와 동일
  • 수학 계산 시 쓰는 ( )와 ( ) 연산자는 다름 -> 계산 시 쓰는 ( )는 primary expression, ( ) 연산자는 함수 호출이나 형 변환 시 쓰이는 연산자. 우선순위는 동일

* Primary Expression : operator 없이 하나의 operand로만 구성된 표현식.

- Identifier (a, int_max), Constant ('A', 1000), Parenthetical Expression (괄호식. (4 + a)) 등이 있다

 

- 기본적인 연산자 우선순위

  1. ( )             -> 왼쪽에서 오른쪽으로 대입
  2. +, - (단항)   -> 오른쪽에서 왼쪽. 숫자가 먼저 들어가고 그 앞에 부호가 들어감
  3. *, /            -> 왼쪽에서 오른쪽
  4. +, - (이항)   -> 왼쪽에서 오른쪽
  5. =              -> 오른쪽에서 왼쪽

 

5.7 나머지 연산자

  • 나머지 연산자 (%) : 나숫셈의 나머지 값을 출력
#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

int main()
{
	int seconds = 0, minutes = 0, hours = 0;

	printf("Input Seconds : ");		// while문 사용시 입력값에 따라 while문 실행 여부를 선택하기 
	scanf("%d", &seconds);			// 위해 입력문을 밖에 둠

	while (seconds >= 0) {

		minutes = seconds / 60;
		seconds %= 60;

		hours = minutes / 60;
		minutes %= 60;
		
		printf("%d hours, %d minutes, %d seconds\n", hours, minutes, seconds);

		printf("Input Seconds : ");
		scanf("%d", &seconds);
	}
	printf("Good bye\n");

	return 0;
}

 

Output :
Input Seconds : (3000 입력)
0 hours, 50 minutes, 0 seconds
Input Seconds : (4000 입력)
1 hours, 6 minutes, 40 seconds
Input Seconds : (-1 입력)
Good bye

 

 

#include <stdio.h>

int main()
{
	int div, mod;		
	
	div = 11 / 5;
	mod = 11 % 5;
	printf("div = %d, mod = %d\n", div, mod);

	div = 11 / -5;
	mod = 11 % -5;
	printf("div = %d, mod = %d\n", div, mod);

	div = -11 / -5;
	mod = -11 % -5;
	printf("div = %d, mod = %d\n", div, mod);

	div = -11 / 5;
	mod = -11 % 5;
	printf("div = %d, mod = %d\n", div, mod);

	return 0;
}
  • 나머지 연산자 사용 시 앞의 피연산자가 음수이면 결괏값도 음수
Output :
div = 2, mod = 1
div = -2, mod = 1
div = 2, mod = -1
div = -2, mod = -1

 

 

5.8 증가, 감소 연산자

  • 증감 연산자는 변수의 값을 1씩 증가 혹은 감소시킴
  • python에는 증감 연산자가 없음
#include <stdio.h>

int main()
{
	int a = 0;
	a++;					// a += 1. postfix
	printf("%d\n", a);

	++a;					// a += 1. prefix
	printf("%d\n", a);

	double b = 0;
	b++;
	printf("%f\n", b);

	++b;
	printf("%f\n", b);

	return 0;
}

 

Output :
1
2
1.000000
2.000000

 

 

#include <stdio.h>

int main()
{
	int count_1 = 0;
	while (++count_1 < 10) {		// count에 1이 더해진 다음에 10과 비교
		printf("%d ", count_1);
	}

	printf("\n");

	int count_2 = 0;
	while (count_2++ < 10) {		// 비교를 한 다음에 count에 1이 더해짐
		printf("%d ", count_2);
	}

	return 0;
}

 

Output :
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9 10
  • count_1의 경우에는 0이 1로 증가된 후 조건식에 들어가서 반복문이 9번 실행
  • count_2의 경우에는 조건식에서 값 비교 후 0이 1로 증가되어 반복문이 10번 실행

 

#include <stdio.h>

int main()
{
	int i = 1, j = 1;
	int i_post, pre_j;

	i_post = i++;		// i가 i_post에 대입(1)이 된 후 1 증가
	pre_j = ++j;		// j가 1 증가된 후(2) pre_j에 대입

	printf("%d %d\n", i, j);
	printf("%d %d\n", i_post, pre_j);
    
    printf("\n");
    
    int k = 3;
	int l = 2 * --k;	// i가 1 감소된 후 계산. C언어에선 증감 연산자가 *, / 보다 우선순위가 높음
	printf("%d %d\n", k, l);

	k = 1;
	l = 2 * k--;		// 계산 후 i가 1 감소
	printf("%d %d\n", k, l);

	return 0;
}

 

Output :
2 2
1 2
    
2 4
0 2

 

 

#include <stdio.h>

int main()
{
	int x, y, z;
	x = 3, y = 4;
	z = (x + y++) * 5;			// x + (y++)
	printf("%d %d %d", x, y, z);

	return 0;
}

 

Output : 
3 5 35

 

 

#include <stdio.h>

int main()
{
	// 증감연산자는 수정 가능한 R-value에만(변수) 사용 가능
	int x = 1, y = 1, z;
	z = x * y++;
	// z = (x * y)++;	-> error
	// z = 3++;		-> error

	int n = 1;
	printf("%d %d", n, n * n++);	// 증감 연산자가 들어간 인자 하나가 여려번 사용되면 
    					// 시스템마다 결과가 다르게 나올 수도 있음

	return 0;
}

 

Output : 
2 1

 

* 줄 선택 -> Ctrl + x -> Ctrl + v : 해당 줄 띄어쓰기 적용

 

 

 


강의 출처 : https://www.inflearn.com/course/following-c/dashboard

 

홍정모의 따라하며 배우는 C언어 - 인프런 | 강의

'따배씨++'의 성원에 힘입어 새롭게 개발된 C 언어로 시작하는 프로그래밍 입문 강의입니다. '따배씨'와 함께 프로그래밍 인생을 업그레이드 해보세요., 따라하며 배우는 C언어 '따배씨++'의 성원

www.inflearn.com