728x90
/* 더하기 1 을 하는 방법 */
#include <stdio.h>
int main() {
int a = 1, b = 1, c = 1, d = 1;
a = a + 1;
printf("a : %d \n", a);
b += 1;
printf("b : %d \n", b);
++c;
printf("c : %d \n", c);
d++;
printf("d : %d \n", d);
return 0;
}
a : 2
b : 2
c : 2
d : 2
++c와 d++ 모두 2로 같은 값이 나왔다.
/* prefix, postfix */
#include <stdio.h>
int main() {
int a = 1;
printf("++a : %d \n", ++a);
a = 1;
printf("a++ : %d \n", a++);
printf("a : %d \n", a);
return 0;
}
++a : 2
a++ : 1
a : 2
분명히, 위에서 ++c 나 d++ 이나 결과를 출력했을 때 에는 결과가 1 이 잘 더해져서 2 가 나왔는데 여기서는 왜 다르게 나올까요? 앞서 말했듯이 ++ a 는 먼저 1 을 더한 후 결과를 반환한다고 했고 a++ 은 먼저 결과를 반환 한 후, 그 후에 1 을 더한 다고 했습니다.
printf("++a : %d \n", ++a);
즉, 위의 경우 a 에 먼저 1 을 더한 값인 2 를 printf 함수에 반환하여 %d 에 2 가 들어가게 됩니다. 그런데,
printf("a++ : %d \n", a++);
이 경우, 먼저 a 의 값을 printf 에 반환하며 %d 에 1 이란 값이 '먼저' 들어 간 뒤, 1 이 출력된 이후 a 에 1 이 더해집니다. 따라서, 다시 printf 문으로 a 의 값을 출력하였을 때 에는 2 라는 값이 나오게 되는 것입니다. 참고로, 위 4 개의 연산 중에서 가장 빨리 연산되는 것은 a++ 과 같은 증감 연산입니다.
왜냐하면, a = a + 1 의 경우 ADD a 1 로 하지만, a++ 은 INC a 로 좀 더 빨리 계산된다. 자세한 내용은 나중에하지만, 요즘의 컴파일러는 최적화가 잘 되어 있어, a = a + 1 같은 것은 a++ 로 바꾸어 컴파일 해버립니다.
출처: 씹어먹는C언어
'C/C++' 카테고리의 다른 글
[C/C++] 포인터 (정리 및 수정 중) (0) | 2023.03.23 |
---|---|
[C/C++] 진법변환 (0) | 2023.03.22 |
[C/C++] 2의 보수 표현법과 정수 오버플로우 (0) | 2020.05.31 |