inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

int 자료형에 관한 질문입니다

275

jeri

작성한 질문수 3

0

데이터 자료형에 대한 설명을 해주실 때
int * int 연산은 overflow 가 나기 쉬우니 __int64 자료형을 사용하거나
중간에 (__int64) 로 캐스팅을 해주는 등 꼼수를 써서 해결해야 한다고 하셨는데
그 외에는 해결 방법이 없을까요?
구글링을 해봤는데 제가 키워드를 잘못찾은건지 마땅히 나오는 방안이 없더라고요..
예를 들어서
게임 상점에서 m 골드 짜리 hp포션을 n개 사고 싶은데(구매 개수에 제한은 없음), 제 골드는 k가 있는거죠
이 상황에서 k - m*n을 하고싶은데, m*n을 계산 했을 때 오버플로우가 발생할 수도 있잖아요
제가 생각하는 해결 방안은
m골드 짜리 아이템을 살 수 있는 최대 개수를 m*n 을 했을 때 오버플로우가 나지 않는 개수로 한정한다(혹시 실제로 게임에서 포션을 999개 단위로 살수 있는 이유가 이런 이유때문인가요?)
아니면 k-m 을 loop문으로 쭉 돌리고 k가 -가 되면 루프 중지하는 조건을 걸면 일단 오버플로우는 나지 않을거고 내부적으로 * 연산도 + 연산으로 구성되어있으니
시간 차이가 곱하기를 하는 것보다 많이 나지는 않지 않을까요???

C++

답변 1

1

Rookiss

컴퓨터가 대부분 64비트 환경에서 돌아가는 요즘,
레지스터도 64비트 단위로 연산을 하기 때문에
int64를 선언하고 사용하는건 아무런 부담이 없습니다.
그리고 int32는 3억이 넘으면 아슬아슬한 반면
int64는 상상 이상으로 커서 평생 다 쓸 일이 없습니다.
따라서 hp, 데미지, gold 같은 애들은 int64로 가는게 일반적입니다.
(기획적으로 인플레이션 등을 고려해서라도, 굳이 int32로 갈 이유가 없습니다)

그럼에도 정말 int32로 가고 싶다면,
말씀하신대로 Max 수치를 체크하는 식으로 안전하게 검증을 하면 됩니다.
(루프를 도는 것은 cpu가 조금 아까워 보이네요)
정수 오버플로우 문제는 대부분 int*int만 살짝 조심하면 그만이긴 하지만,
그래도 프로젝트마다 한 두번 정도는 늘 발생하는 것 같네요.

0

jeri

감사합니다!! 

visualstudio에서 파일분할관리실습시 설정 문의를 드립니다.

0

559

1

정렬함수 좀 더 확실하게 이해 할 방법이 있을까요?

0

453

1

strcpy() 구현 관련 질문

0

532

1

빌드(망치)를 누르니 이런 오류가 떴습니다. 어떻게 해야 하나요?

0

475

1

클래스 타입의 포인터 질문합니다

0

559

1

입력값을 enum 값에 넣어주는거 이제 막혔나요?

0

503

1

템플릿 특수화 관련 질문

0

389

1

포인터 관련 질문합니다!

0

270

1

Unable to start assembler. Check your settings.

0

848

2

cpu선택

0

548

1

포인터 질문이 있습니다

0

331

1

20:35 에서 구조체 크기에 대한 질문입니다!

0

589

1

iterator 삭제관련

0

414

1

함수 호출을 디스어셈블러로 분석하다가 궁금점이 생겼습니다!

0

316

1

15 분 45초 대 질문

0

317

0

스택 프레임 질문합니다!

2

312

1

오른값 참조 in 게임

0

391

0

동적할당 질문이 있습니다

0

457

1

안녕하세요 메모리에 대해 질문드립니다.

0

312

1

함수객체 의 매개변수

0

365

1

복사생성자

0

439

1

main이나 endl 부분이 주황색으로 표시된건 어떻게 하나요

0

430

1

포인터 실습 강의를 보고 궁금한게 있습니다.

0

359

1

스택 오버플로우

2

801

1