산술 연산자 예제

① 3 / 4 = 0
② a = 10; // a = 10
b = a++; // b = 10, a = 11
c = ++a; // c = 12, a = 12
후위증감 연산자 => 먼저 식을 수행하고 증감 수행, 그 줄을 다 수행하고 나서 증감을 수행한다는 의미가 아닌, 피연산자가 계산되고 난 뒤에 증감이 수행된다는 의미
전위증감 연산자 -> 증감을 먼저 수행하고 식을 계산
#include <stdio.h>
void main() {
int a, b;
a = 4 * (1 / 2); // (1/2)의 값은 0.5 가 아니라 1을 2로 나눈 몫인 0이다. 따라서 a = 0
b = a++; // 전위 증감 연산자 => 식을 수행한 후 증감연산, b = 0, a = 1
printf("%d", b); // b = 0 따라서 0이 출력된다.
}
연산자 우선순위
구분 | 종류 | 예 |
높음 낮음 |
() | 괄호 |
++,--,~,! | 단항 | |
*, /, % | 산술 | |
+, - | 산술 | |
<<, >> | 비트 | |
<, <=, >, >= | 비교 | |
==, != | 관계 | |
&, ^, | | 비트 | |
&&, || | 논리 | |
=, +=, -=, *=, /=, %= | 대입 |
a = 3, b = 4, c = 5, d = 6
① a * b + c >= d && d / a - b != 0
정답: 1
풀이: (12 + 5) >= d && 2 - 4 != 0
17 >= 6 && -2 != 0
1 && 1 = 1
괄호 >> 산술 >> 비트 >> 비교 > 관계 >> 논리 >> 대입
a = 3, b = 4, c = 5, d = 6
② d % b + ++a * c--
정답: 22
풀이: 6 % 4 + 4 * 5
2 + 20
22
a = 3, b = 4, c = 5, d = 6
② d % b + a++ * c--
정답: 17
풀이: 6 % 4 + 3 * 5
2 + 15
17
#incldue <stdio.h>
int main() {
int a = 5, b = 5;
a *= 3 + b++; // a *= 3 + b++, a = 5 * 8 = 40
printf("%d %d", a, b); // 40, 6
return 0;
}
주의!! b++ 에서 b의 증감 타이밍 주의 → b에 해당하는 연산이 수행된 직후 바로 증감 수행
#include <stdio.h>
int main() {
int a = 5, b = 5;
a *= 3 + b++ + b; // a *= 3 + 5 + 6
printf("%d %d", a, b); // 70, 6
return 0;
}
조건문
#include <stdio.h>
int main() {
int i = 3;
int j = 4;
if( (++i > j--) && (i++ < --j) ) i = i-- + ++j; // if 조건문에서 && 뒤에 조건은 수행도 안함
else j = i-- - --j;
printf("%d\n", i); // 3
}
// 4, 3 -> 4 - 2 -> 3, 2
관계연산자 종류
연산자 | 예 | 결과값 |
== | 10 == 9 | 0 |
!= | 3 != 3 | 0 |
> | 5 > 5 | 0 |
>= | 5 >= 5 | 1 |
< | 7 < 7 | 0 |
<= | 7 <= 7 | 1 |
#include <stdio.h>
int main() {
int a = 3+5, b = 1, c; // a = 8, b = 1, c= 쓰레기값
int ap, bp; // ap = 쓰레기값, bp = 쓰레기값
ap = a++; // ap = 8, a = 9
bp = ++b; // bp = 2, b = 2
b = 3 * (ap == 8); // b = 3
c = 5 * (ap != 8); // c = 0
printf("%d %d %d %d %d", a, b, c, ap, bp); // 9 3 0 8 2
}
http://ideone.com << 컴파일 사이트
[문]
다음과 같은 C언어 문장에서 모든 변수가 int형이라고 가정할 때, 문장을 실행한 결과 각 변수들의 값은 얼마인가?
y = 3 + 2 * ( x = 7 / 2) // x = 3, y = 9
num = 6 + 14 % 5 / 2 - 2 * 2; // 4
int a = 10, b = 20;
num = (a++ == 11) && (b++ == 20); // num = 0 && 1(원래 수행 안함) = 0
// a = 11, b = 20, && 연산자에서 앞 연산 결과가 거짓이면 뒤에 연산은 수행 안함
'정보처리기사' 카테고리의 다른 글
[정보처리기사] C언어 특강 11강 정리 (0) | 2024.09.26 |
---|---|
[정보처리기사] C언어 특강 10~11강 정리 (0) | 2024.09.19 |
[정보처리기사] C언어 특강 1~4강 정리 (0) | 2024.09.10 |
[정보처리기사] 2020년 1회, 2회 정보시스템 구축 관리 (0) | 2024.07.23 |
[정보처리기사] 2020년 1회, 2회 프로그래밍 언어 활용 정리 (0) | 2024.07.23 |