Jeder Compiler läuft auf einer bestimmten Maschine, auf einer bestimmten Hardware.
Nehmen wir zum Beispiel an, dass unsere vorzeichenbehaftete Ganzzahl von Maschine/Prozessor im Bereich von 16 Bit liegt. Dies bedeutet, dass MAX_INT der Hexadezimalwert 0x7fff ist, der 32767 Dezimalwert ist und MIN_INT 0x8000 Hexadezimalwert ist, was -32768 Dezimalwert ist.
Die meisten Maschinen haben ein ALU-Steuerregister, das definiert, wie sich vorzeichenbehaftete Ganzzahlen im Falle eines Überlaufs verhalten. Dieses Register hat im Allgemeinen ein Sättigungsflag.
Überlauf Beispiel: Wenn die Sättigungs Flag gesetzt ist, als im Fall, dass das Ergebnis der letzten ganze Zahl ALU-Operation signiert größer als MAX_INT ist, wird das Ergebnis auf MAX_INT eingestellt wird. zum Beispiel, wenn die letzte Operation 0x7ffe zu 0x2 hinzugefügt hat, wird das Ergebnis 0x7fff sein.
Wenn das Sättigungsflag nicht gesetzt ist, wird das Ergebnis wahrscheinlich auf die unteren 16 Bits des korrekten Ergebnisses gesetzt, wenn das Ergebnis der letzten ALU-Operation mit Vorzeichen mit Vorzeichen größer als MAX_INT ist. In unserem Fall 0x7ffe + 0x2 = 0x8000, was die kleinste ganze Zahl ist.
Bei Integer ohne Vorzeichen der Compiler Garantien, dass das Ergebnis nach der Definition von unsigned int zusätzlich in C.
Unterschreitung Beispiel wird: Jede Maschine hat MIN_FLOAT Definition. Und wenn das Sättigungs-Flag gesetzt ist, wird ein Ergebnis, das kleiner als MIN_FLOAT ist, auf MIN_FLOAT gerundet. Sonst wird das Ergebnis dem Betrieb des Prozessors entsprechen. (Suchen Sie im Internet nach den Begriffen Mantisse und Exponent, wenn Sie Interesse an Fließkommadarstellungen und Operationen haben).
'scanf ("% d ", & c)' ist kein Überlauf oder Unterlauf; Es ist Undefined Behavior, Punkt. – aschepler
Um @ascheppler weiter zu vervollständigen, ist das wahrscheinlichste Ergebnis, 3 weitere Bytes nach der c-Variablen zu verdecken, vielleicht sogar mit der Rücksprungadresse selbst zu verwirren. Angenommen, der Compiler (Optimierer) verkraftet nichts und verhält sich ähnlich wie die manuelle intuitive Übersetzung. –