5

在 的情况下,C 中的评估顺序是什么x<<y>>z?是不是(x<<y)>>z因为从左到右的关联性?

编辑 需要知道标准说明了什么,而不是通过检查特定编译器来猜测发生了什么。

4

5 回答 5

5

是的,>>并且<<是左关联的并且具有相同的优先级,所以x << y >> z等价于(x << y) >> z

于 2012-09-24T14:10:40.417 回答
3

在线 C 2011 标准草案 (N1570)

6.5.7 移位运算符

句法

1     移位表达式加法表达式
          移位表达式<<加法表达式
          移位表达式>>加法表达式

语法表明两个运算符都是左结合的,如下所示:

    x << y >> z
    | | | |
    +------ + ------+ | |
            | | |
            五 | 五
      移位表达式        >>   加法表达式

于 2012-09-24T15:10:08.713 回答
2

是的,你是对的,因为 << 和 >> 运算符具有相同的优先级并且是左关联的

于 2012-09-24T14:12:10.577 回答
1

两者<<>>都在同一水平线上,它们的方向是从左到右。

所以它会是(x<<y)>>z

更多参考资料.. http://msdn.microsoft.com/en-us/library/2bxt6kc4%28v=vs.71%29.aspx

于 2012-09-24T14:11:39.413 回答
-1

是的,但我认为分两步做会更安全,就像那样x<<yy>>z导致编译器错误地解释x<<y>>z. 我一直没有使用按位运算,但如果我记得很清楚,这就是我所说的。我希望我对你有所帮助。

于 2012-09-24T14:12:39.490 回答