왜 C++에서는 (-2147483648> 0) 이 true인가요?


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쓰고 있어요!

  • 2016년 01월 13일에 작성됨

조회수 260


1 답변


좋아요
0
싫어요
채택취소하기

-2147483648은 숫자가 아닙니다. C++이 음수 literal은 지원하지 않기 때문이지요. -2147483648은 양수 2147483648 앞에 단항 연산자 -가 붙은 expression입니다.

2147483648은 질문하신 분의 플랫폼에서는 int형이 담기엔 너무 큰 숫자입니다. 플랫폼에서 long int가 더 큰 범위를 저장할 수 있었다면 컴파일러가 알아서 2147483648long int로 여겨(C++11이상에서는 long long int) false를 출력했겠지만

아마 해당 플랫폼에서는 long intint의 크기가 같아 상수 2147483648를 표현할 수 있는 signed integer type이 없어 overflow가 발생했을 겁니다.

이 경우는 특별히 정해진 바가 없어 구현에 따라 양수/음수 어떤 것으로도 해석될 수도 있습니다. 2147483648를 음수로 해석 하는 경우, -2147483648는 positive가 되어서 True가 되는 것이지요

  • 2016년 01월 13일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close