Deine Begründung ist schlicht falsch.
Ich gehe im Folgenden auf c = a << 32 ein:
C (ISO/IEC 9899:1999 (E) §6.5.7): Ist der linke Operand schmaler als int, so wird er zunächst auf int konvertiert. Dann folgt << und hier sagt die C-Norm, dass deren Verhalten undefiniert ist, falls um die...