通常、Cでは、二項演算子のオペランドを上位のオペランドのタイプにプロモートする必要があります。これを悪用して、コードに冗長なキャストを入力しないようにすることができます。次に例を示します。
if (x-48U<10) ...
y = x+0ULL << 40;
等
ただし、少なくともgccでは、この動作はビットシフトでは機能しないことがわかりました。つまり
int x = 1;
unsigned long long y = x << 32ULL;
右側のオペランドのタイプによって左側のオペランドがにプロモートさunsigned long long
れ、シフトが成功することが期待されます。ただし、代わりに、gccは警告を出力します。
warning: left shift count >= width of type
gccは壊れていますか、それとも標準はビットシフトの型昇格規則にいくつかの例外を設けていますか?