7

x = 3とzが割り当てられていない場合、なぜ
2とz = x-- - --x評価されるのですか?

私の教授は現在これについて講義しており、私は現在このジレンマに悩まされています。残念ながら、なぜそれが起こるのか誰も説明できません。

4

3 に答える 3

17

x-、x = 3の場合、その後は2になります。--x、x = 1の場合、減算(2から)が事前に行われるためです。

したがって、3-1=2です。

于 2012-06-14T07:49:41.223 に答える
8

理解を深めるために、操作の順序を示します。

  • x --- --x xの値を保持します(これをtmpAと呼びます)。tmpAは3です。
  • x ----- xxを減らします。今は2です。
  • x ------xxを減らします。今は1です。
  • x-- --- x xの値を保持します(これをtmpBと呼びます)。tmpBは1です。
  • x------- x計算値からサブストラクションを実行します3-1=2。

-- prefix式を評価する前にデクリメントが行われることを意味し、式を評価postfix --した後にデクリメントが行われることを意味します。

于 2012-06-14T07:52:35.793 に答える
5

わかりました、その非常に簡単です:

角かっこを追加しましょう:

z = ( x-- ) - ( --x )

^^これは、トークン化後にコンパイラがコードを認識する方法です。

コンパイラは方程式(右部分)を左から右に評価します

今、

x--xの値をPOPしてからデクリメントし、値をメモリにプッシュバックするのと同じです。わかりました、それをしましょう:

Xの現在の値は3で、デクリメントされた値は2です。したがって、方程式では3になりますが、Xには新しい値2が含まれます。

--xX値をデクリメントしてから、この値を方程式にPOPすることに等しい。やってみましょう:

Xの現在の値は2です(前の操作でデクリメントされたため)。ここで、もう一度Xの値を減らします。2-1 = 1、わかりました。

ここで、方程式全体に戻りますz = (3) - (1) = 2

于 2012-06-14T07:56:42.553 に答える