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

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가 되는 것이지요

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.