• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

Overflow 출력 관련 질문

21.11.22 16:05 작성 조회수 109

2

안녕하세요. 항상 좋은 강의 감사드립니다.

실습을 진행 중 궁금한 사항이 있어 질문을 올리게 되었습니다.

#include <iostream>

#include <limits>

short s = std::numeric_limits<short>::max();

cout << "max + 1: " << ss + 1 << endl;

cout << "max + 2: " << ss + 2 << endl;

s += 1;

cout << "max + 1: " << ss << endl;

위 코드를 출력하면 다음과 같이 출력됩니다.

max + 1: 32768                                                                        max + 2: 32769                                                                    max + 1: -32768

 

수의 최대 범위가 넘어갔는데도, 출력을 할 때 더 큰 수가 출력이 되는 이유가 변수에 저장을 안해서 그런 것 인가요?

L-value와 R-value와 관계가 있는 것인지 궁금합니다.

 

감사합니다.

답변 1

답변을 작성해보세요.

3

안소님의 프로필

안소

2021.11.22

L,R-value 와 관련있는 것 같습니다.

R-value 는 개발자가 접근할 수 없는, os 관리하에 있는 임시 메모리인데 s + 1, s + 2 는 임시 메모리에 담기는 것이라서 오버플로우가 일어나지 않은 것 같습니다.

반면에 s+=1; 을 해준 후 s 값을 출력하는 것은 ( 최대값 + 1 ) 의 결과를 short 크기인 s 에 집어넣은 후 그 값을 보려고 하는 것입니다. (L-value 출력) 그래서 오버플로우가 일어난 것입니다.