在 的情况下,C 中的评估顺序是什么x<<y>>z
?是不是(x<<y)>>z
因为从左到右的关联性?
编辑 需要知道标准说明了什么,而不是通过检查特定编译器来猜测发生了什么。
在 的情况下,C 中的评估顺序是什么x<<y>>z
?是不是(x<<y)>>z
因为从左到右的关联性?
编辑 需要知道标准说明了什么,而不是通过检查特定编译器来猜测发生了什么。
是的,>>
并且<<
是左关联的并且具有相同的优先级,所以x << y >> z
等价于(x << y) >> z
。
6.5.7 移位运算符 句法 1 移位表达式: 加法表达式 移位表达式<<加法表达式 移位表达式>>加法表达式
语法表明两个运算符都是左结合的,如下所示:
x << y >> z | | | | +------ + ------+ | | | | | 五 | 五 移位表达式 >> 加法表达式
是的,你是对的,因为 << 和 >> 运算符具有相同的优先级并且是左关联的。
两者<<
和>>
都在同一水平线上,它们的方向是从左到右。
所以它会是(x<<y)>>z
更多参考资料.. http://msdn.microsoft.com/en-us/library/2bxt6kc4%28v=vs.71%29.aspx
是的,但我认为分两步做会更安全,就像那样x<<y
会y>>z
导致编译器错误地解释x<<y>>z
. 我一直没有使用按位运算,但如果我记得很清楚,这就是我所说的。我希望我对你有所帮助。