x <y>&gt; z在C </y>中的评估顺序

时间:2012-09-24 14:08:54

标签: c evaluation

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

修改 需要知道标准告诉它的内容,而不是通过检查特定编译器来猜测是什么。

5 个答案:

答案 0 :(得分:5)

是的,>><<保持关联且优先级相同,因此x << y >> z相当于(x << y) >> z

答案 1 :(得分:3)

Online C 2011 Draft Standard (N1570)

6.5.7 Bitwise shift operators

Syntax

1     shift-expression:
          additive-expression
          shift-expression << additive-expression
          shift-expression >> additive-expression

语法表示两个运算符都是左关联的,如下所示:

    x      <<       y         >>           z
    |               |         |            |
    +------ + ------+         |            |
            |                 |            |
            V                 |            V
      shift-expression        >>   additive-expression

答案 2 :(得分:2)

是的,你是对的,因为&lt;&lt;和&gt;&gt;运营商拥有same precendence and are left-associative

答案 3 :(得分:1)

<<>>都位于同一级别,其方向是从左到右。

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

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

答案 4 :(得分:-1)

是的,但是我认为通过两个步骤进行更安全,例如x<<y然后y>>z导致编译器可以严重解释x<<y>>z。我一直没有使用按位操作,但如果我记得很清楚,那就是我所说的。我希望我帮助过你。