x, y, z 값이 어떤건가요

조회수 62회
int x = 10, y = 10, z;
x = y++;
z = (++x) % 3;
  • 오른쪽 위에 보면 코드 실행기 있으니 한번 돌려보세요 HIAOAIH 2021.4.7 22:42
  • 돌렸는데 계속 안뜨네요..ㅜㅜ 세연 2021.4.7 22:47

1 답변

  • 안녕하세요! 결론부터말하면 코드안의 주석과같은 값이 들어있습니다.

    int x = 10, y = 10, z; //10 10 ?
    x = y++; //10 11 ?
    z = ++x % 3; //11 11 2
    

    먼저 첫째줄에서는 x = 10, y = 10, z = ?죠?(z에는 쓰레기값이 들어있습니다.) 둘째줄은 x = 10, y = 11, z = ? 입니다.(z는 변동이없기때문에 마찬가지로 쓰레기값입니다.) y는 ++로 1을 더했기때문에 11이 될거라고 생각했지만 "왜 x는 11이 아니냐?"라는의문이 생길 수 있습니다.

    천천히설명하면 먼저 ++, --같은것을 증감연산자라고합니다.
    증감연산자는 1을 더하거나 빼는역할을 하는데 종류는 4가지있습니다.
    i++, ++i, i--, --i 이런게있는데

    #include <stdio.h>
    int main()
    {
        int n;
        n = 5;
        printf("%d\n", n++); //출력 5 
    
        n = 5;
        printf("%d\n", ++n); //출력 6
    
        n = 5;
        printf("%d\n", n--); //출력 5
    
        n = 5;
        printf("%d\n", --n); //출력 4
        return 0;
    }
    

    같은코드가있을때 처음의 n++는 역할(출력)을 한다음에 1증가하고 ++n는 1을 증가한다음에 출력하기때문에 6이 출력됩니다.(마이너스--도 순서는 똑같습니다.)

    int x = 10, y = 10, z; //10 10 ?
    x = y++; //10 11 ?
    z = ++x % 3; //11 11 2
    

    다시질문으로 돌아오면 둘째줄의 x = y++는 역할(대입)한다음에 1증가하기때문에 x에는 원래y(10)가 들어갑니다. 셋째줄은 z = ((++x) % 3)이런 순서가되면서 x는 먼저더하고 대입하기때문에 x = 11, z = (11 % 3) 그래서 z = 2가됩니다. 참고로 (괄호)는 필요없지만 일부러 붙여놨습니다.

    모르는게 있으면 물어주세요. 감사합니다.

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.