inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

독하게 시작하는 C 프로그래밍

단항 증감 연산자 예시 정답

해결된 질문

6354

백종진

작성한 질문수 1

0

단항 증감 연산자 수업에서 예시로 들었던...

int x = 5, y = 10, data = 0;

data = ++x + ++y + ++x;

printf("data = %d\n", data);

의 출력값이 25가 나옵니다. 아무리 생각해도 24가 정답인 것 같은데...

 

c 컴퓨터-구조 assembly-language vc++

답변 2

0

널널한 개발자

++x, ++y는 단항 연산으로 덧셈 및 단순 대입연산보다 우선순위가 높습니다. 그러므로 아래 연산을 풀어서 설명하면

data = ++x + ++y + ++x;
  1. 이름이 x인 변수의 값을 1증가 시킴 (이 때 x는 6이 됨)

  2. 이름이 y인 변수의 값을 1증가 시킴

  3. 이름이 x인 변수의 값을 또 1증가 시킴 (이 때 x는 7이 됨)

  4. 이름이 x인 변수의 값과 이름이 y인 변수의 값과 이름이 x인 변수의 값을 모두 더해 이름이 data인 변수에 저장

결국 data = 7 + 11 + 7;이 되는 것입니다. 이런 경우 디스어셈블 코드를 보는 것이 도움이 됩니다. 참고하시기 바랍니다. 😄

image.png

 

 

 

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

백종진님께서 질문하신 ‘단항 증감 연산자’의 예시에 대한 궁금증을 이해합니다. 제공된 코드에서 출력값이 25가 나오는 이유를 설명드리겠습니다.

int x = 5, y = 10, data = 0;

data = ++x + ++y + ++x;

printf("data = %d\n", data);

이 프로그램에서 연산이 어떻게 이루어지는지 단계별로 살펴보겠습니다:

  1. ++xx의 값을 먼저 증가시킨 후 값을 사용합니다. 따라서 처음 ++xx는 6이 됩니다.
  2. 그 다음 ++y를 수행하면, y는 11이 됩니다.
  3. 마지막으로 ++x 다시 수행되어 x는 7이 됩니다.

이렇게 연산을 수행하면 수식은 6 + 11 + 7가 되어 최종적으로 data에는 25가 저장됩니다.

구체적으로, 이 과정에서 두 번의 ++x가 사용되기 때문에 x의 최종 값이 두 번 증가하게 되며, y는 시작 값에서 한 번만 증가합니다. 그래서 결과적으로 x + y + x6 + 11 + 7로 계산됩니다.

이와 관련된 더 상세한 설명이 인프런 커뮤니티의 기존 질문에서도 논의되었습니다:

  • 단항 증감연산자 12:44 결과값: 위와 비슷한 예시에서 같은 주제의 질문이 다뤄졌으며, 컴파일러에 따라 결과가 다르게 나올 수 있다는 점도 설명되어 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

scanf("%d\n") 의미

0

20

1

주소 연산자(&) 간접 지정자(*) 반대 개념

0

33

1

Virtual Memory, Memory, Memory mapping tables

0

51

1

샘플코드 출력 오류 발생 질문드립니다

0

63

2

값의 교환에 사용되는 변수의 위치.

0

88

2

메모리 비교에 관한 질문

0

81

2

문자열 Null

0

63

1

C, C++

0

89

2

문자열 입출력 코드 에러

0

60

2

선생님! 120화 2분 50초 질문입니다.

0

67

1

caller 가 메모리 할당 해제를 할 때의 문제점 질문

0

64

2

단축키 맞는지 여부 문의드립니다.

0

61

2

문자열을 사용하는 이중 포인터에 대하여 질문합니다

0

66

1

char 포인터 변수의 크기에 대하여 제가 이해한 것이 맞을까요

0

78

2

용어 설명 필요

0

57

2

stdin, stdout

0

71

2

필수 실습 (최댓값을 반환하는 함수)

0

93

2

아......ㅠㅠ

0

100

2

버퍼 내 엔터

0

73

1

2진수 뺄셈에서 carry-out

0

112

2

union 식별자는 실무에서 보통 어디에서 사용하나요?

0

80

2

필수실습문제 공부법 (진도 vs 복습)

0

104

2

예제파일 다운로드

0

79

2

Visial Studio Code 를 설치해서 사용해도 수업을 따라가는데 지장이 있나요?

0

120

3