Computerarithmetik

Welcher Ausdruck berechnet die Multiplikation einer Ganzzahl x mit 10 mit Verschiebungen und Additionen ohne Multiplikationsbefehl?

  1. A(x << 3) + (x << 1)
  2. B(x << 10)
  3. C(x << 2) + x
Antwort und Erläuterung anzeigen

Antwort: A. (x << 3) + (x << 1)

Eine Verschiebung um 1 Bit nach links verdoppelt, also ist x << 3 das 8-Fache und x << 1 das 2-Fache. 8x + 2x = 10x, daher berechnet (x << 3) + (x << 1) das 10-Fache. Die Multiplikation mit einer Konstanten lässt sich so durch Kombinationen aus Verschiebungen und Additionen ersetzen, und auch Compiler wählen die schnellere Variante. x << 10 ergibt das 2¹⁰ = 1024-Fache, (x << 2) + x ergibt 4x + x = das 5-Fache. Es ist darauf zu achten, die Verschiebungsweite nicht mit dem Faktor 10 zu verwechseln.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Computerarithmetik

  1. Warum sind übliche Ganzzahldividierer (Restoring, Non-Restoring usw., die den Quotienten Bit für Bit bestimmen) tendenziell langsamer als Multiplizierer?
  2. Was ergibt sich, wenn −8 (1111 1000) als vorzeichenbehaftete 8-Bit-Ganzzahl mit arithmetischem Rechtsshift um 1 Bit nach rechts geschoben wird?
  3. In C: Welche Kombination der Ergebnisse von −7 / 2 und −7 >> 1 (bei arithmetischem Rechtsshift) für int ist korrekt?
  4. In C: Was ergibt 0 − 1 bei einer 32-Bit-Ganzzahl ohne Vorzeichen (unsigned int)?
  5. Wie lässt sich bei der Addition vorzeichenloser Ganzzahlen feststellen, dass das Ergebnis den darstellbaren Bereich überschritten hat (Überlauf)?