왜 C++에서는 (-2147483648> 0) 이 true인가요?
조회수 4162회
32비트에서 -2147483648
는 int형이 표현할 수 있는 가장 작은 값이잖아요.
근데 if
문 안에서는 overflow가 나는 것 같네요
(-2147483648> 0)
을 쓰면
if (-2147483648 > 0)
std::cout << "true";
else
std::cout << "false";
결과 : true
(int(-2147483648)> 0)
을 쓰면
if (int(-2147483648) > 0)
std::cout << "true";
else
std::cout << "false";
결과 : false
둘은 왜 다른 결과를 내나요? 저는 VC쓰고 있어요!
1 답변
-
-2147483648
은 숫자가 아닙니다. C++이 음수literal
은 지원하지 않기 때문이지요.-2147483648
은 양수2147483648
앞에 단항 연산자-
가 붙은expression
입니다.2147483648
은 질문하신 분의 플랫폼에서는int
형이 담기엔 너무 큰 숫자입니다. 플랫폼에서long int
가 더 큰 범위를 저장할 수 있었다면 컴파일러가 알아서2147483648
을long int
로 여겨(C++11이상에서는long long int
)false
를 출력했겠지만아마 해당 플랫폼에서는
long int
와int
의 크기가 같아 상수2147483648
를 표현할 수 있는signed integer type
이 없어overflow
가 발생했을 겁니다.이 경우는 특별히 정해진 바가 없어 구현에 따라 양수/음수 어떤 것으로도 해석될 수도 있습니다.
2147483648
를 음수로 해석 하는 경우,-2147483648
는 positive가 되어서True
가 되는 것이지요
댓글 입력