kyuseo의 게임 프로그래밍
억, 조와 같은 돈(Money) 단위에서 int 오버플로우 주의 본문
개요.. |
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 :: 오류 발생!!