• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

질문)

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

답변을 작성해보세요.

1

oort_cloud98님의 프로필

oort_cloud98

2022.09.01

int가 가질수 있는 최대값은 2,147,483,647 입니다 최대값을 넘어가서 오버플로우가 발생해서 그렇습니다.

오버플로우 발생 시 값이 해당 자료형의 최솟값부터 다시 시작하기 때문에 max값에 나오지 않습니다

해당 값을 사용하고 싶으시다면 unsigned int 자료형을 사용하시면 될 것 같습니다.