Home

Projekte

Notizen

Bücherregal

Mitwirkende

Notizen /

Shift-Operatoren in C

Aus aktuellem Anlass (wir sind kürzlich über das Detail gestolpert) möchte ich folgendes zu den Shift-Operatoren in C ("<<" und ">>") anmerken:

Ich zitiere mal aus K&R, Anhang A7.8,
Shift Operators:

"The result is _undefined_ if the right
operand is negative, or greater than
or equal to the number of bits in the
left expression's type."

Im Klartext: Wenn man z. B. auf einer 32-Bit-Maschine einen unsigned integer um 32 Bit (oder mehr) nach links oder rechts schiebt, würde man vermuten, dass der Wert komplett verschwindet (durch 0en ersetzt wird), worauf man sich aber nicht verlassen sollte.

Letztlich ist dies nur ein Fallstrick von Diversen, die es unter C gibt, es gibt auch noch ein paar andere Details, die nicht definiert sind. Ein Beispiel ist z. B. der Rechtsshift von signed integern. Viele Prozessoren bieten hier sowohl sar (arithmetischer shift), als auch slr (logischer shift) an, welcher von beiden von C verwendet wird, ist jedoch ebenfalls nicht definiert.

Tags: C ,CPP

Letzte Änderung am 07.07.2006 18:44 Uhr