Bitshift und Integer-Promotion?

Normalerweise erfordert C, dass die Operanden eines Binäroperators in den Typ des übergeordneten Operanden hochgestuft werden. Dies kann ausgenutzt werden, um zu vermeiden, dass Code mit ausführlichen Darstellungen gefüllt wird. Beispiel:

if (x-48U<10) ...
y = x+0ULL << 40;

etc

Ich habe jedoch festgestellt, dass dieses Verhalten zumindest mit gcc nicht für Bitverschiebungen funktioniert. Dh

int x = 1;
unsigned long long y = x << 32ULL;

ch würde erwarten, dass der Typ des rechten Operanden bewirkt, dass der linke Operand zu @ hochgestuft wirunsigned long long damit die Verschiebung gelingt. Stattdessen gibt gcc eine Warnung aus:

warning: left shift count >= width of type

Ist gcc kaputt oder macht der Standard eine Ausnahme von den Regeln zur Typheraufstufung für Bitverschiebungen?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage