C按位移位:右操作数考虑用于隐式类型转换?

Loi*_*oic 2 c bit-shift implicit-conversion

gcc 4.8.4警告1u << 63ul?(假设64位long和32位int)并计算0.这是正确的(没有晋升1u1ul转移之前)?

ISO/IEC 9899:201x,6.3.1.8(通常的算术转换):"许多期望算术类型的操作数引起转换的运算符"; 6.5.7(按位移位运算符):"对每个操作数执行整数提升......".

但我无法得出结论.哪些是"很多运营商"?据我所知,"整数提升"不属于宽泛的类型int(我是否正确?),但标准没有明确声明对于隐式类型转换不考虑按位移位的右操作数.

Die*_*Epp 5

每个操作都单独记录.例如,n1548§6.5.5"乘法运算符"3

通常的算术转换是在操作数上执行的.

§6.5.7"按位移位运算符"中省略了该短语.相反它说:

对每个操作数执行整数提升.结果的类型是提升的左操作数的类型....

由于按位移位运算符部分对"通常的算术转换"没有任何说明,因此不会发生转换.