2016-12-14 13 views
2

私はこの 'for'ループにいくつかの問題があるようですが、これは試験問題です。私のロジックが間違っている理由を理解できません。C - Basic For Loop

int n = 1, r, i; 

for(i=0; i<5; i++) 
    n *= 2; 

r = n--; 

このコードの実行後にrとnの値を見つけます。ここ

(紙、したがって画像リンク)は、このための私のロジックれる:正しい出力は、しかしであり、n = 31及びr = 32 Image

。どうしてこれなの?どこが間違っていますか?

+1

「32」の理由 –

+0

ループnの後には32があり、n--を実行するとnのVALUEが変更されるためです。しかし、n--が実行される前に、nはrに格納され、32であり、その後、減少後のn-である。 –

答えて

10

r = n--;は、rに割り当てられた後にnをデクリメントします。

8

これはforの問題ではなく、--nn--の問題です。

  • n--n--式の値である第1の戻りn、次に減算n <- n-1を行います。最初

  • --n減算n <- n-1を行い、その後--n


  1. https://en.wikipedia.org/wiki/Increment_and_decrement_operators
+0

ああ。そうですか。だから、それはy = x--のようなものです。 yの値は、減分前のxの値になります。 ++と - を除いて、これが起こる他のシナリオはありますか? – FShiwani

+0

@ FShiwaniは厳密ではなく、 '='は優先順位が最も低く、 'n - 'は割り当ての前に発生します。ある言語では、 'expression'と' statement'の2つの型があり、 'expression'には' n - 'のような値があるので、' r = n - 'は' r'を**式** 'n - 'となり、 'n - 'の値は 'n'の値になります。 – delta

-2

int n = 1, r = 0, i; 
 

 
    for(i=0; i<=5; i++) 
 
    r *= 2; 
 

 
n = r--;
の値として nの新しい値を返します

ここに最終回答があります。それを確認してください。それが役に立てば幸い。

+0

最後のポストデクリメントの前に 'r'が' n'の値を割り当てられているので、 'r'を0に初期化するのは_wrong_ではありません。 'i'の宣言を削除するのは間違いです。しかし、なぜfor文の制御式を変更したいのですか?問題はなぜこのコードがそれぞれ32と31の 'r'と' n'の最終値をもたらすのかということでした。 –

+0

こんにちは、私はちょうど私の答えを更新しました。ありがとう – JohnC