Si j'exécute le code suivant dans C:entier C comportement de débordement lors de l'affectation à des entiers plus grande largeur
#include <stdint.h>
uint16_t a = 4000;
uint16_t b = 8000;
int32_t c = a - b;
printf("%d", c);
Il imprime correctement « -4000 » comme résultat. Cependant, je suis un peu confus: ne devrait-il pas y avoir un débordement arithmétique lors de la soustraction d'un entier non signé plus grand de l'autre? Quelles règles de casting sont en jeu ici? Cette question semble un peu noobish, donc toutes les références seraient grandement appréciées.
Ma référence est bien sûr à l'ancienne norme. Voir la réponse de tgamblin pour C99. Bien qu'ils disent la même chose. – TrayMan
3.2.1.5 est pour les conversions double/float/int/etc. Il cherche des promotions intégrales (long/int/char/short/etc) qui sont en 3.2.1.1 de cette version de la norme. C'est en 6.3.1.1 dans la nouvelle norme que j'ai liée à ci-dessus. – tgamblin
Il pourrait également vouloir 3.2.1.2 aussi (ints signés/non signés) – tgamblin