Unterschied: logsicher und arithmetischer shift bzw. schieben

2 Antworten

Was man unter einem "arithmetischen Shift nach links" versteht, hängt vom Prozessor ab. Mir persönlich sind zwei unterschiedliche Varianten bekannt. Die meisten Prozessoren haben aber gar keinen "arithmetischen Shift nach links".

Beim Shift nach rechts gilt folgendes:

Ein Shift nach rechts entspricht einer Division durch 2. Bei vorzeichenlosen oder positiven Zahlen muss man dazu die fehlenden Stellen auf der rechten Seite mit Nullen auffüllen; bei negativen Zahlen im Zweierkomplement mit Einsen.

Wenn nun die vordere Stelle einer Zahl eine Eins ist, so muss man wissen, ob es sich um eine vorzeichenlose oder eine negative Zahl handelt:

10101010 shr 4 = 11111010 (negativ)
10101010 shr 4 = 00001010 (vorzeichenlos)
01010101 shr 4 = 00000101 (immer; vordere Stelle ist eine 0)
  • Der "logische Shift" geht dabei von einer vorzeichenlosen Zahl aus.
  • Der "arithmetische Shift" geht von einer vorzeichenbehafteten Zahl aus - es wird also mit der Ziffer (0 oder 1) aufgefüllt, die zuvor an der Stelle ganz links war.

Bei manchen Prozessoren werden auch die Statusbits bei arithmetischem und logischem Shift unterschiedlich gesetzt.

Das kann man beides in der Wikipedia nachlesen: http://de.wikipedia.org/wiki/Logische_Verschiebung

Im Artikel kannst du dann auch den Link zur arithmetischen Verschiebung anklicken …

Außerdem gibt es dann noch das „Rotieren“ der Operatoren nach links bzw. rechts mit und ohne Carry-Flag. Hoffentlich kommst du jetzt nicht ins „Rotieren“ …