【发布时间】:2017-08-04 20:50:21
【问题描述】:
gcc 4.8.4 警告 1u << 63ul(假设 64 位 long 和 32 位 int)并计算 0。理所当然(在转移之前没有从1u 升级到1ul)?
ISO/IEC 9899:201x, 6.3.1.8(通常的算术转换):“许多期望算术类型的操作数的运算符会导致转换”; 6.5.7(按位移位运算符):“对每个操作数执行整数提升......”。
但我不能下结论。哪些是“许多操作员”?据我了解,“整数提升”不适用于比int 更宽的类型(我是否正确?),但标准没有明确说明隐式类型不考虑按位移位的右操作数转换。
【问题讨论】:
-
@Olaf:仅仅因为某些事情对你来说是显而易见的并不意味着嘲笑某人提出这个问题是合适的。
-
@DietrichEpp:嗯,从问题中引用的文字中确实不清楚。但 6.5.7 的引文确实提供了答案,正如我(希望)在我的回答中阐明的那样。
-
此处有关整数提升和常用算术转换的信息:stackoverflow.com/questions/17312545/…
标签: c implicit-conversion bit-shift