echa un vistazo a esto. El compilador se queja de que tengo un desbordamiento de enteros, pero cuando miro las reglas del estándar C89 para la promoción integral junto con los valores en esa expresión, me parece que no hay desbordamiento.C ¿Desbordamiento integral?
[email protected]:~$ cat test.c
#include <stdio.h>
#include <inttypes.h>
const uint32_t value =
(0x7F-0x00 + 1) * (256 + 256*256 + 256*256*256) +
(0xDF-0xC2 + 1) * (256 + 256*256 + 256*256*256);
int
main(void)
{
printf("value = %"PRIu32"\n", value);
return 0;
}
[email protected]:~$ gcc -std=c89 -pedantic -Wall -Wextra test.c
test.c:5: warning: integer overflow in expression
test.c:6: warning: integer overflow in expression
test.c:6: warning: overflow in constant expression
[email protected]:~$ ./a.out
value = 2661195264
[email protected]:~$
Por otra parte, Google confirma que la respuesta de la 2661195264 es el valor correcto para esa expresión! (See this link)
Entonces, ¿cómo es que el programa puede producir un valor correcto cuando hubo desbordamiento de enteros? Y más importante aún, ¿cómo es que había un desbordamiento de enteros en esa expresión para empezar?
Tal vez utiliza entradas firmadas en lugar de sin firmar, entonces se habría producido un desbordamiento en la operación firmada aunque se calculó el valor correcto sin firmar. – Nobody