-2147483648은 32 비트 정수 유형의 가장 작은 정수이지만 if(...)
문장 에서 오버플로되는 것처럼 보입니다 .
if (-2147483648 > 0)
std::cout << "true";
else
std::cout << "false";
이것은 true
내 테스트에서 인쇄 됩니다. 그러나 -2147483648을 정수로 캐스트하면 결과가 달라집니다.
if (int(-2147483648) > 0)
std::cout << "true";
else
std::cout << "false";
인쇄 false
됩니다.
혼란 스러워요. 누구든지 이것에 대해 설명 할 수 있습니까?
02-05-2012 업데이트 :
귀하의 의견에 감사드립니다. 내 컴파일러에서 int의 크기는 4 바이트입니다. 간단한 테스트를 위해 VC를 사용하고 있습니다. 내 질문의 설명을 변경했습니다.
이 글에서 AndreyT 는 컴파일러가 그러한 입력에서 동작하는 방법과이 최소 정수가 어떻게 구현되었는지에 대해 매우 자세하게 설명했습니다. 반면 에 qPCR4vir 는 관련된 "호기심"과 정수 표현 방법을 제시했습니다. 너무 인상적입니다!
INT_MIN
의를 -9223372036854775808
하는 경우, CHAR_BIT
16 그리고도 함께 CHAR_BIT == 8
하고 sizeof(int
== 4)`당신이 얻을 수 있습니다 -9223372036854775807
C 2-보완 번호를 필요로하지 않기 때문에.