-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
질문)
22.09.01 16:36 작성 조회수 152
0
#include <iostream>
#include <limits>//numeric_limits<int>::lowest()
#include <algorithm>//max()
using namespace std;
int main()
{
int fibonacci[] = { 0,1,1,2,30000000000,5,8,13,21,34,55,89 };
int max_num = std::numeric_limits<int>::lowest();
for (const auto& n : fibonacci)
max_num = std::max(max_num, n);
cout << max_num << endl;
return 0;
}
위 코드처럼 fibonacci array에 3,000,000,000 넣었더니, output이 89가 나옵니다.
그래서 0을 하나 뺀, '300,000,000'을 해보니 output이 정상적으로 300,000,00을 출력합니다. 왜 그런건가요? stack메모리가 꽉차서 heap영역으로 동적할당해야하는건가요?
답변을 작성해보세요.
1
oort_cloud98
2022.09.01
int가 가질수 있는 최대값은 2,147,483,647 입니다 최대값을 넘어가서 오버플로우가 발생해서 그렇습니다.
오버플로우 발생 시 값이 해당 자료형의 최솟값부터 다시 시작하기 때문에 max값에 나오지 않습니다
해당 값을 사용하고 싶으시다면 unsigned int 자료형을 사용하시면 될 것 같습니다.
답변 1