-2147483648 es el número entero más pequeño para el tipo entero con 32 bits, pero parece que se desbordará en la if(...)
oración:
if (-2147483648 > 0)
std::cout << "true";
else
std::cout << "false";
Esto se imprimirá true
en mis pruebas. Sin embargo, si lanzamos -2147483648 a entero, el resultado será diferente:
if (int(-2147483648) > 0)
std::cout << "true";
else
std::cout << "false";
Esto se imprimirá false
.
Estoy confundido. ¿Alguien puede dar una explicación sobre esto?
Actualización 02-05-2012:
Gracias por sus comentarios, en mi compilador, el tamaño de int es de 4 bytes. Estoy usando VC para algunas pruebas simples. He cambiado la descripción en mi pregunta.
Esas son muchas respuestas muy buenas en esta publicación, AndreyT dio una explicación muy detallada sobre cómo el compilador se comportará en dicha entrada y cómo se implementó este entero mínimo. qPCR4vir por otro lado dio algunas "curiosidades" relacionadas y cómo se representan los enteros. ¡Tan impresionante!
INT_MIN
de -9223372036854775808
, si CHAR_BIT
es 16. E incluso con CHAR_BIT == 8
y sizeof(int
== 4) `puede obtener -9223372036854775807
porque C no requiere números de 2 Complementos.