Grundlagen der Programmiersprache C
int und unsigned int haben 32 Bit. Was davon ist nach dem C-Standard undefiniertes Verhalten?
- AZu einer unsigned-int-Variablen mit dem Maximalwert 4294967295 wird 1 addiert
- BEin negativer int-Wert wird mit >> um 1 Bit nach rechts geschoben
- CZu einer int-Variablen mit dem Maximalwert 2147483647 wird 1 addiert
Antwort und Erläuterung anzeigen
Antwort: C. Zu einer int-Variablen mit dem Maximalwert 2147483647 wird 1 addiert
Überschreitet das Ergebnis einer Operation mit vorzeichenbehafteten Ganzzahlen den darstellbaren Bereich, wie bei 2147483647 + 1 mit int, ist das undefiniertes Verhalten. Für Operationen mit vorzeichenlosen Ganzzahlen ist festgelegt, dass sie auf den Rest der Division durch 2³² zurückfallen; 4294967295 + 1 ergibt daher 0 und ist kein undefiniertes Verhalten. Ob ein Rechtsshift eines negativen Werts als arithmetischer Shift oder als logischer Shift erfolgt, bestimmt die Implementierung (implementierungsdefiniertes Verhalten); bei gcc ist es ein arithmetischer Shift. Ein Linksshift eines negativen Werts ist dagegen undefiniertes Verhalten.
Weiter: 9 weitere Fragen zu Grundlagen der Programmiersprache C