zuweisen Wenn ich den folgenden Code in C ausführen:C Integer-Überlauf Verhalten bei größerer Breite ganzer Zahlen
#include <stdint.h>
uint16_t a = 4000;
uint16_t b = 8000;
int32_t c = a - b;
printf("%d", c);
Es richtig druckt ‚-4000‘ als Ergebnis. Allerdings bin ich ein wenig verwirrt: Sollte es keinen arithmetischen Überlauf geben, wenn eine größere vorzeichenlose ganze Zahl von der anderen subtrahiert wird? Welche Regeln spielen hier eine Rolle? Diese Frage scheint ein bisschen noobish, also würden irgendwelche Hinweise sehr geschätzt werden.
Meine Referenz bezieht sich natürlich auf den alten Standard. Siehe die Antwort von tgamblin für C99. Obwohl sie dasselbe sagen. – TrayMan
3.2.1.5 ist für Double/Float/Int/etc Konvertierungen. Er sucht nach integralen (long/int/char/short/etc) Promotions, die in 3.2.1.1 dieser Version des Standards enthalten sind. Es ist in 6.3.1.1 im neueren Standard, den ich oben verlinkt habe. – tgamblin
Er möchte vielleicht auch 3.2.1.2 (signed/unsigned ints) – tgamblin