728x90
5.6 연산자 우선순위와 표현식 트리
- 사칙연산 우선순위는 수학 계산 순서와 동일
- 수학 계산 시 쓰는 ( )와 ( ) 연산자는 다름 -> 계산 시 쓰는 ( )는 primary expression, ( ) 연산자는 함수 호출이나 형 변환 시 쓰이는 연산자. 우선순위는 동일
* Primary Expression : operator 없이 하나의 operand로만 구성된 표현식.
- Identifier (a, int_max), Constant ('A', 1000), Parenthetical Expression (괄호식. (4 + a)) 등이 있다
- 기본적인 연산자 우선순위
- ( ) -> 왼쪽에서 오른쪽으로 대입
- +, - (단항) -> 오른쪽에서 왼쪽. 숫자가 먼저 들어가고 그 앞에 부호가 들어감
- *, / -> 왼쪽에서 오른쪽
- +, - (이항) -> 왼쪽에서 오른쪽
- = -> 오른쪽에서 왼쪽
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
'Study_C, C++ > 홍정모의 따라하며 배우는 C언어' 카테고리의 다른 글
[홍정모의 따라하며 배우는 C언어] 6.1 while 반복 루프에서 scanf()의 반환값 사용하기 ~ 6.4 관계 연산자 (Relational Operators) (0) | 2021.09.02 |
---|---|
[홍정모의 따라하며 배우는 C언어] 5.9 표현식과 문장 ~ 5.12 함수의 인수와 매개변수 (0) | 2021.09.01 |
[홍정모의 따라하며 배우는 C언어] 5.3 더하기, 빼기, 부호 연산자들 ~ 5.5 나누기 연산자 (0) | 2021.08.23 |
[홍정모의 따라하며 배우는 C언어] 4.10 scanf() 함수의 사용법 ~ 5.2 대입 연산자와 몇 가지 용어들 (0) | 2021.08.22 |
[홍정모의 따라하며 배우는 C언어] 4.9 printf() 함수가 인자들을 해석하는 과정 (0) | 2021.08.19 |