사용자가 다음과 같은 C++에서 int로 서명되지 않은 INT를 변환하는 효율적이고 문제없는 방법 다음C++에서 부호없는 int를 int로 변환하는 정수 오버플로를 피하는 효율적인 방법은 무엇입니까?
#include <limits.h>
void safeConvert(unsigned int passed)
{
int variable = static_cast<int>(passed % (INT_MAX+1));
...
}
또는 더 나은 방법이?
UPDATE
으로는이 정수로 부호없는 INT> INT_MAX을 할당하는 정의되지되지 제임스 McNellis 지적 - 오히려이 정의 구현입니다. 이와 같은 문맥은 이제 부호가없는 int가 INT_MAX를 초과하면이 정수가 0으로 리셋되도록 보장하는 것이 내 선호에있다.
원본 문장
나는 부호 INT의 카운터로 사용의 번호를 가지고 있지만, 특정 경우에 정수로 주위를 전달하려는.
정상적인 작동 상태에서이 카운트는 INT_MAX의 범위 내에서 유지됩니다. 그러나
으로 실행하지 않으려면
구현 특정 동작을 수행해야합니다. 비정상적인 (그러나 유효한) 경우 발생합니다. 여기서 효율적인 변환을 원합니다.
'safeConvert'가되어야하나요? 그래서, 입력이 INT_MAX보다 클 때 어떻게하고 싶습니까? 그런 경우에 몇 가지 플래그를 설정 하시겠습니까? –
부호가있는 산술 연산에서 오버플로가 발생하면 정의되지 않은 동작이 발생하지만 부호있는 정수 유형으로 변환하지는 않습니다. 값을 대상 유형으로 나타낼 수없는 경우 결과는 구현에 따라 정의됩니다. –
@Hamish 오타를 찾아 주셔서 감사합니다. 입력이 INT_MAX보다 큰 경우 int 값이> 0인지 확인하는 것이 좋습니다. –