Computerarithmetik
In C: Welche Kombination der Ergebnisse von −7 / 2 und −7 >> 1 (bei arithmetischem Rechtsshift) für int ist korrekt?
- A−7 / 2 ergibt −3, −7 >> 1 ergibt −4
- BBeide ergeben −4
- C−7 / 2 ergibt −4, −7 >> 1 ergibt −3
Antwort und Erläuterung anzeigen
Antwort: A. −7 / 2 ergibt −3, −7 >> 1 ergibt −4
Die ganzzahlige Division in C (ab C99) rundet das Ergebnis in Richtung 0 ab, aus −3.5 wird also −3. Der arithmetische Rechtsshift rundet dagegen zum kleineren Wert (in Richtung negativ unendlich) ab; −7 (1111 1001) um 1 Bit nach rechts ergibt 1111 1100 = −4. Bei negativen Zahlen stimmen Shift und Division daher nicht überein. Ersetzt der Compiler eine Division durch 2 durch einen Shift, fügt er für negative Zahlen Korrekturbefehle hinzu. Bei positiven Zahlen stimmen beide überein.