-5

このトピックが何度も取り上げられていることは承知していますが、少々お待ちください。

評価の順序の文脈でも、これを何度も理解しようとしました。opを理解するための明示的な例を探していました。http://docs.roxen.com/pike/7.0/tutorial/expressions/operator_tables.xml私が知りたいのは、そこに示されている例 (以下にカットアンドペーストしました)が正しい。

1+2*2                  =>  1+(2*2)
1+2*2*4                =>  1+((2*2)*4)
(1+2)*2*4              =>  ((1+2)*2)*4
1+4,c=2|3+5            =>  (1+4),(c=(2|(3+5)))
1 + 5&4 == 3           =>  (1 + 5) & (4 == 3)
c=1,99                 =>  (c=1),99
!a++ + ~f()            =>  (!(a++)) + (~(f()))
s == "klas" || i < 9   =>  (s == "klas") || (i < 9)
r = s == "sten"        =>  r = (s == "sten")

たとえば、C の仕様によれば、does1+2*2*4は実際にそうである1+((2*2)*4)か、そうであった可能性があります。1+(2*(2*4))ヘルプや例へのさらなる参照は役に立ちます。再度、感謝します。

4

4 に答える 4

1

代入演算子以外の二項演算子は、優先順位が等しい場合は左から右に進むため、1 + 2 * 2 * 4と同等1 + ((2 * 2) * 4)です。明らかに、この特定のケースで1 + (2 * (2 * 4))は同じ答えが得られますが、常にそうとは限りません。たとえば、 は に評価され、 には1 + 2 / 2.0 * 4評価され1 + ((2 / 2.0) * 4) == 5.0ませ1 + (2 / (2.0 * 4)) == 1.25

評価の順序は、演算子の優先順位とはまったく別のものです。1 つには、演算子の優先順位は常に明確に定義されていますが、評価の順序は明確に定義されていないことがあります (たとえば、関数の引数が評価される順序)。

于 2013-09-22T17:29:54.353 に答える