Zitat Zitat von radbruch
Warum ((int)1 << 15) aber 0xFFFF8000 ergeben soll, ist mir so aus dem Stand etwas unklar. Ich hätte erwartet, dass die fehlenden Bits 16-31 mit 0 aufgefüllt werden.
Weil die 1 ein signed int ist. Das <<15 schiebt das gesetzte Bit ins Vorzeichen und somit ergibt sich als Ergebnis -32768. Das auf 32 Bit erweitert ergibt das Bitmuster 0xFFFF8000 (die FFFF sind das Resultat der Sign-Extension).

Einfache Abhilfe:
"(1U<<15)", "(1UL<<15)" oder ein Typcast für die 1.