Aus der Reihe „C/C++ stinkt“:

int shiftamt = 32;
printf("%08x\n",(0xffffffff << shiftamt));  // prints 0xffffffff
printf("%08x\n",(0xffffffff << 32));        // prints 0x00000000

Warum das so ist (und völlig korrekt ist), wird bei StackOverflow wunderbar erklärt. Macht auch Sinn. Aber keinen Spaß beim Programmieren. (Siehe auch meinen anderen Beitrag dazu.)

Wers ausprobieren will: Könnte vom Compiler, Compilerversion, Architektur des Rechners, Mondphase oder sonstwas abhängen. Getestet auf einem Intel Core i3 mit „g++ (GCC) 3.4.5 (mingw-vista special r3)“. (Update: Mit der zweiten Zeile – statischer Shift um 32 bit – gibts wenigstens ne Compilerwarnung.)

Advertisements