2016-12-14 57 views
2

我似乎有這個'for'循環的一些問題,這是一個考試問題,我不明白爲什麼我的邏輯是不正確的。C - 基本For循環

int n = 1, r, i; 

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

r = n--; 

查找此代碼運行後r和n的值。

這裏是我的這個邏輯(在紙面上,因此圖像鏈接): Image

正確的輸出。然而,N = 31且r = 32。爲什麼是這樣?我哪裏錯了?

+1

爲什麼它應該是'32'? –

+0

因爲循環後n是32,並且n的值正在改變。然而,在執行n--之前,n存儲在32中的r中,然後減去n--。 –

回答

10

r = n--;在分配給r後遞減n。

8

這不是for問題,而是--nn--

  • n--作爲表達n--的值第一返回n,然後執行減法n <- n-1

  • --n先做減法n <- n-1,然後返回n新價值的--n


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

啊。我懂了。所以當它像是說y = x--時。 y的值將是減量前x的值。除了++和 - 之外,還有其他可能發生這種情況的情況嗎? – FShiwani

+0

@FShiwani不完全,'='處於最低優先級,'n - '在分配之前發生。在一種語言中,有兩種類型,'expression'和'statement',每個'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--;

下面是最終答案。去檢查它。希望能幫助到你。

+0

由於'r'在最後一次減少之前被分配了'n'的值,所以不會將_rr初始化爲0,也不是必需的。刪除「我」的聲明是錯誤的。但是,爲什麼你想改變'for'語句的控制表達式呢?問題是關於爲什麼這段代碼分別產生32和31的'r'和'n'的最終值。 –

+0

嗨,我只是更新了我的答案。謝謝 – JohnC