728x90
6.10 다양한 대입 연산자들 (그리고 어셈블리 코드 확인법)
- 어셈블리 코드 확인법 : 디버거 실행 후 우클릭 -> go to disassembly 혹은 Debug -> windows -> disassembly (Ctrl+Alt+D)
6.11 콤마 연산자
#include <stdio.h>
int main()
{
int x, y, z;
z = x = 1, y = 2;
printf("x = %d, y = %d, z = %d \n", x, y, z);
z = (x = 1), (y = 2);
printf("x = %d, y = %d, z = %d \n", x, y, z);
z = ((x = 1), (y = 2));
// z = (1, 2). comma operator는 가장 오른쪽에 있는 값이 전체 expression의 값임
printf("x = %d, y = %d, z = %d \n", x, y, z);
return 0;
}
Output :
x = 1, y = 2, z = 1
x = 1, y = 2, z = 1
x = 1, y = 2, z = 2
#include <stdio.h>
int main()
{
int i, j;
i = 1;
i++, j = i; // comma is a sequence point (; 처럼) -> 즉 후위연산 계산 후 j = i 대입
printf("%d %d\n", i, j);
return 0;
}
Output :
2 2
6.12 제논의 역설 시뮬레이션 예제
#include <stdio.h>
int main()
{
/* simulation of a moving object
- speed = 1.0m/s
- dt = 1.0s
- distance traveled during dt = speed * dt
-Step 1 : 1.0m/s * 1.0m/s = 1.0m/s, dis = 1.0m
-Step 2 : 1.0m/s * 1.0m/s = 1.0m/s, dis = 1.0m + 1.0m = 2.0m
-Step 3 : 1.0m/s * 1.0m/s = 1.0m/s, dis = 2.0m + 1.0m = 3.0m
*/
/*
Zeno`s Paradox -> 매초 시간 간격을 반으로 줄임
- Step 1: 1.0 * 1.0 = 1.0, 1.0
- Step 2: 1.0 * 0.5 = 0.5, 1.0 + 0.5 = 1.5
- Step 2: 1.0 * 0.25 = 0.25, 1.5 + 0.25 = 1.75
... ...
*/
const double speed = 1.0;
const unsigned repeat_max = 50; // 최대 반복 횟수 설정
double dt = 0.01, time = 0.0;
double dist_arch = 0.0; // Achilleus의 시작점
double dist_turtle = 1.0; // Turtle의 시작점
double speed_arch = 10.0, speed_turtle = 0.001;
printf("Time = %fs, dt = %fs, Archilleus = %fm, turtle = %fm\n",
time, dt, dist_arch, dist_turtle);
for (unsigned i = 0; i < repeat_max; ++i) {
dist_arch += speed_arch * dt;
dist_turtle += speed_turtle * dt;
time += dt;
printf("Time = %fs, dt = %fs, Archilleus = %fm, turtle = %fm\n",
time, dt, dist_arch, dist_turtle);
dt *= 0.5; // 곱하기가 나누기보다 빠르므로 보통 곱하기를 씀
}
return 0;
}
컴퓨터는 특성상 무한한 수를 다룰 수 없음 ex) 무한등비급수
Output : Time = 0.000000s, dt = 0.010000s, Archilleus = 0.000000m, turtle = 1.000000m
Time = 0.010000s, dt = 0.010000s, Archilleus = 0.100000m, turtle = 1.000010m
Time = 0.015000s, dt = 0.005000s, Archilleus = 0.150000m, turtle = 1.000015m
Time = 0.017500s, dt = 0.002500s, Archilleus = 0.175000m, turtle = 1.000018m
Time = 0.018750s, dt = 0.001250s, Archilleus = 0.187500m, turtle = 1.000019m
Time = 0.019375s, dt = 0.000625s, Archilleus = 0.193750m, turtle = 1.000019m
Time = 0.019688s, dt = 0.000313s, Archilleus = 0.196875m, turtle = 1.000020m
.
.
.
.
Time = 0.020000s, dt = 0.000000s, Archilleus = 0.200000m, turtle = 1.000020m
강의 출처 : https://www.inflearn.com/course/following-c/dashboard
'Study_C, C++ > 홍정모의 따라하며 배우는 C언어' 카테고리의 다른 글
[홍정모의 따라하며 배우는 C언어] 6.16 배열과 런타임 에러 (0) | 2021.09.25 |
---|---|
[홍정모의 따라하며 배우는 C언어] 6.13 탈출조건 루프 do while ~ 6.15 중첩된 루프들 (0) | 2021.09.12 |
[홍정모의 따라하며 배우는 C언어] 6.5 사실과 거짓 ~ 6.9 for는 유연해요 (0) | 2021.09.05 |
[홍정모의 따라하며 배우는 C언어] 6.1 while 반복 루프에서 scanf()의 반환값 사용하기 ~ 6.4 관계 연산자 (Relational Operators) (0) | 2021.09.02 |
[홍정모의 따라하며 배우는 C언어] 5.9 표현식과 문장 ~ 5.12 함수의 인수와 매개변수 (0) | 2021.09.01 |