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.