-2147483648 é o menor número inteiro para o tipo inteiro com 32 bits, mas parece que ele transbordará na if(...)
frase:
if (-2147483648 > 0)
std::cout << "true";
else
std::cout << "false";
Isso será impresso true
nos meus testes. No entanto, se convertermos -2147483648 em número inteiro, o resultado será diferente:
if (int(-2147483648) > 0)
std::cout << "true";
else
std::cout << "false";
Isso será impresso false
.
Estou confuso. Alguém pode dar uma explicação sobre isso?
Atualização 02-05-2012:
Obrigado pelos seus comentários, no meu compilador, o tamanho de int é 4 bytes. Estou usando o VC para alguns testes simples. Eu mudei a descrição na minha pergunta.
São muitas respostas muito boas neste post, o AndreyT deu uma explicação muito detalhada sobre como o compilador se comportará em tais entradas e como esse número inteiro mínimo foi implementado. O qPCR4vir, por outro lado, forneceu algumas "curiosidades" relacionadas e como o número inteiro é representado. Tão impressionante!
INT_MIN
de -9223372036854775808
, se CHAR_BIT
for 16. E mesmo com CHAR_BIT == 8
e sizeof(int
== 4) `você pode obter -9223372036854775807
porque C não requer números de 2 complementos.