-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 truenos 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_MINde -9223372036854775808, se CHAR_BITfor 16. E mesmo com CHAR_BIT == 8e sizeof(int== 4) `você pode obter -9223372036854775807porque C não requer números de 2 complementos.