Si ejecuto el siguiente código en C:C número entero comportamiento de desbordamiento cuando se asignan a números enteros más grande de ancho
#include <stdint.h>
uint16_t a = 4000;
uint16_t b = 8000;
int32_t c = a - b;
printf("%d", c);
se imprime correctamente '-4000' como el resultado. Sin embargo, estoy un poco confundido: ¿no debería haber un desbordamiento aritmético al restar un entero más grande sin signo del otro? ¿Qué reglas de lanzamiento están en juego aquí? Esta pregunta parece un poco noobish, por lo que cualquier referencia sería muy apreciada.
Mi referencia es, por supuesto, al viejo estándar. Ver la respuesta de tgamblin para C99. Aunque dicen lo mismo. – TrayMan
3.2.1.5 es para conversiones double/float/int/etc. Está buscando promociones integrales (long/int/char/short/etc) que se encuentran en 3.2.1.1 de esa versión del estándar. Está en 6.3.1.1 en el estándar más nuevo al que he vinculado anteriormente. – tgamblin
También podría querer 3.2.1.2 también (entradas/salidas sin firmar) – tgamblin