[英]x<<y>>z order of evaluation in C
在x<<y>>z
的情况下,C中的求值顺序是多少? 是(x<<y)>>z
,因为从左到右的相关性?
编辑需要知道标准告诉它的内容,而不是通过检查特定编译器来猜测是什么。
是的, >>
和<<
是左关联的并具有相同的优先级,因此x << y >> z
等同于(x << y) >> z
。
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
是的,你是对的,因为<<和>>运算符具有相同的优先级并且是左关联的 。
<<
和>>
都在同一水平,它们的方向是从左到右。
所以它将是(x<<y)>>z
有关更多参考资料.. http://msdn.microsoft.com/en-us/library/2bxt6kc4%28v=vs.71%29.aspx
是的,但是我认为通过两个步骤来做更安全,比如x<<y
然后y>>z
因为编译器可以很难解释x<<y>>z
。 我一直没有使用按位操作,但如果我记得很清楚,那就是我所说的。 我希望我帮助过你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.