2011-01-30 3 views
1

의 경고를 일으키는 원인이 내 코드에서이 있고 그것은 다음과 경고의 원인이되는 : 내가 얻을long ans = ((long) INT_MIN) * 2 - 1; 때문에 정수 오버 플로우

long ans = ((long) INT_MIN) * 2 - 1; 

경고는 다음과 같습니다

warning: integer overflow detected: op "*" 

내가 한계를 포함했다합니다. 내가 INT_MIN

#include <limits.h> 
+2

을 시도해보십시오. 왜 그렇게해야합니까? –

+3

'sizeof (int) == sizeof (long)'이라면, 그 밖의 무엇을 기대합니까? –

답변

4

을 사용할 수 있도록 시간 이것은 계산이 long의 범위를 오버 플로우 것을 의미합니다. 서명 된 오버플로는 정의되지 않은 동작을 발생시킵니다.

long 의해 표현 가능한 값 INT_MIN 값 범위 간의 유일한 관계는 INT_MINlong로서 표현할 수 있다는 것이다. INT_MIN 두 번 미만이 long으로 표시 될 수 있다고 보장 할 수 없습니다.

0

Visual C++ 컴파일러 long is 4-bytes을 사용하는 Windows x86의 경우 int과 동일합니다. 이유를 제외하고 long long

관련 문제