kyuseo의 게임 프로그래밍

억, 조와 같은 돈(Money) 단위에서 int 오버플로우 주의 본문

C++ 개발

억, 조와 같은 돈(Money) 단위에서 int 오버플로우 주의

kyuseo 2008. 1. 6. 16:41

개요..

 

int, int64 사용 할 경우 억, 조와 같은 돈(Money) 단위에서 오버플로우를 조심해야 합니다.

 

특히 define, 상수를 사용할 경우, 내부에서는 32비트 int로 처리되어 값이 오버플로우가 발생되기 때문에 더욱 주의를 해야 합니다.

 

따라서 define 대신 static const 을 이용하여 값을 처리하면 좋습니다.

 

 

코드

 

// 한글 돈 단위

// 영문 돈단위는 영국과 미국의 해석이 틀리고 동일 나라에서도 뜻하는 바가 틀리기 때문에 한국식으로 표기한다.

ststic const INT64 UK = 100000000;    //

#define DEFINE_UK 100000000;        // 억

 

// 테스트

INT64 nMoney = 500 * UK; // nMoney = 50000000000 :: 정상 처리됨

 

INT64 nDefineMoney1 = 500 * DEFINE_UK; // nDefineMoney1 = -1539607552 :: 오류 발생!!

INT64 nDefineMoney2 = 500 * 100000000; // nDefineMoney2 = -1539607552 :: 오류 발생!!