Computerarithmetik

In C: Welche Kombination der Ergebnisse von −7 / 2 und −7 >> 1 (bei arithmetischem Rechtsshift) für int ist korrekt?

  1. A−7 / 2 ergibt −3, −7 >> 1 ergibt −4
  2. BBeide ergeben −4
  3. 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.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Computerarithmetik

  1. In C: Was ergibt 0 − 1 bei einer 32-Bit-Ganzzahl ohne Vorzeichen (unsigned int)?
  2. Wie lässt sich bei der Addition vorzeichenloser Ganzzahlen feststellen, dass das Ergebnis den darstellbaren Bereich überschritten hat (Überlauf)?
  3. Welche Aussage zum Abstand benachbarter darstellbarer Werte bei Gleitkommazahlen ist korrekt?
  4. Bis zu welcher Obergrenze lassen sich bei einfacher Genauigkeit nach IEEE 754 ab 0 alle ganzen Zahlen exakt darstellen?
  5. Was ist der Hauptgrund, warum Geldbeträge oft nicht als binäre Gleitkommazahlen, sondern als Ganzzahlen mit der kleinsten Einheit (1 Yen oder 1 Cent) als 1 behandelt werden?