Bitshift and integer promotion?
问题 Normally, C requires that a binary operator\'s operands are promoted to the type of the higher-ranking operand. This can be exploited to avoid filling code with verbose casts, for example: if (x-48U<10) ... y = x+0ULL << 40; etc. However, I\'ve found that, at least with gcc, this behavior does not work for bitshifts. I.e. int x = 1; unsigned long long y = x << 32ULL; I would expect the type of the right-hand operand to cause the left-hand operand to be promoted to unsigned long long so that