5.8 증가, 감소 연산자

공기훈·2021년 8월 18일
0

홍정모의 따배씨

목록 보기
21/49
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

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

	++a; // a = a + 1 or a += 1;
	printf("%d\n", a); 
	
	double b = 0;
	b++;
	printf("%f\n", b);

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

	return 0;
}

1, 2, 1.0000, 2.0000 출력된다.

while (count++ <10)
{
	printf("%d", count);
}

count 앞에 ++이 붙는 것이랑 뒤에 ++이 붙는 것은 다르다.
앞에 ++이 있으면 1 부터 9까지 출력이 된다.
하지만 뒤에 ++가 위치하게 되면, 현재상태에서 10과 비교를 한 후에 숫자가 하나 증가한다.

int i = 1, j = 1;
	int i_post, pre_j;

	i_post = i++;
	pre_j = ++j;
	
	printf("%d %d\n", i, j);
	printf("%d %d\n", i_post, pre_j);

이 경우 i_post를 제외하고는 2가 출력되지만, i_post는 1이 출력된다. 왜냐하면 i_post에 1이 대입이 되고난 후, ++가 실행되어 값이 하나 증가하는 것이다.
즉, 증가하기 전의 값이 출력이 되면서 1이 출력되는 것이다.

증가 연산자와 감소 연산자는 사칙연산보다 우선순위가 높다!

int i = 3;
    int l = 2 * --i;
    printf("%d %d\n", i, l);

    i = 1;
    l = 2 * i--;
    printf("%d %d\n", i, l);

이 경우
2 4 0 2가 순서대로 출력되는데, 마지막 줄의 l2 * 1이 되고 나서 i가 1만큼 줄어들었으므로 0 2가 출력된다.

/* very high precedence */
    int x, y, z;
    x = 3, y = 4;
    z = (x + y++) * 5; // (x + y)++ or ++(x + y)
    printf("%d %d %d", x, y, z);

이 경우도 7 * 5가 된 후, y가 1만큼 늘어난다.
즉, 3 5 35가 출력된다.

Warnings

  • ++--와 같은 연산자들은 상수에는 붙일 수 없고, 수정가능한 l-value가 아닌 곳에 (x+y)++와 같이 쓸 수 없다.
  • 다음과 같이 한 줄에 n을 여러 번 쓰는 것을 권장하지 않는다.
    int n = 1;
    printf("%d %d", n, n * n++);
    int x = n / 2 + 5 * (1 + n++);
    int y = n++ + n++;
profile
be a coding master

0개의 댓글