-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
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와 관계가 있는 것인지 궁금합니다.
감사합니다.
답변을 작성해보세요.
3
안소
2021.11.22
L,R-value 와 관련있는 것 같습니다.
R-value 는 개발자가 접근할 수 없는, os 관리하에 있는 임시 메모리인데 s + 1, s + 2 는 임시 메모리에 담기는 것이라서 오버플로우가 일어나지 않은 것 같습니다.
반면에 s+=1; 을 해준 후 s 값을 출력하는 것은 ( 최대값 + 1 ) 의 결과를 short 크기인 s 에 집어넣은 후 그 값을 보려고 하는 것입니다. (L-value 출력) 그래서 오버플로우가 일어난 것입니다.
답변 1