일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 판매
- 카일레라
- 포커
- 상호링크
- 온라인게임
- 영어단어
- 맞고
- 옥션해킹
- 고스톱
- 윈윈
- 게임 개발
- 옥션소송
- 윈윈전략
- 틀린그림찾기
- 홀뎀
- Mame32
- 써치아이
- 포커게임
- 티스토리 초대장
- 프로그램 개발
- 서치아이
- holdem
- 게임 외주
- 카일레라서버
- 영어단어게임
- 보드게임
- MAME
- 맞고게임
- 프로그램 외주
- 틀린그림 찾기
Archives
- Today
- Total
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 :: 오류 발생!!