2010年1月2日

[C#] ++ operator 探討

上一篇講的太模糊了,所以來補充一下 ++ 的用法
(此篇所講的也可套用至 --、** 等其他運算子中)

I. 題目

題目定義:以 z = 0 為起始,進行算式的 print 動作
注意!! 每個算式開始,z 都會先歸零
  1. z++ + z
  2. z + z++
  3. z + z++ + z
  4. z++ + z++
  5. z++ + z++ + z  
  6. ++z + z++
前兩題為上一篇出現過的題目 (不過 Tim 說他不懂,所以再講一次)
後面四題就是坎尼自己亂寫的,有興趣的人先不要往下看,自己算算看
為了方便理解,坎尼會用 z1、z2、z3 來代替該出現順序的 z 值

II. 解說

Q1. z++ + z
z = 0 , z1 = z++ , z2 = z
z1 = 0  (z++ 執行,但 z1 的值仍為 0)
z2 = 1  (因為前一個數為 z++,所以到這邊時 z=1,得到 z2 = z = 1)
z1 + z2 = 0 + 1 = 1 => 得到 列印值 = 1 , z = 1 

Q2. z + z++
z = 0 , z1 = z , z2 = z++
z1 = 0
z2 = 0 (z++執行,但 z2 的值仍為 0)
z1 + z2 = 0 + 0 = 0 => 得到 列印值 = 0 , z = 1

Q3. z + z++ + z
z = 0 , z1 = z , z2 = z++ , z3 = z
z1 = 0
z2 = 0 (z++執行,但 z2 的值仍為 0)
z3 = 1 (因為前一個數為 z++,所以到這邊時 z=1,得到 z3 = z = 1)
z1 + z2 + z3 = 0 + 0 + 1 = 1 => 得到 列印值 = 1 , z = 1

Q4. z++ + z++
z = 0 , z1 = z++ , z2 = z++
z1 = 0 (z++ 執行,但 z1 的值仍為 0)
z2 = 1 (z++執行,且前一個數為 z++,故 z2 的值為 1)
z1 + z2 = 0 + 1 = 1 => 得到 列印值 = 1 , z = 2

Q5. z++ + z++ + z
z = 0 , z1 = z++ , z2 = z++ , z3 = z
z1 = 0 (z++ 執行,但 z1 的值仍為 0)
z2 = 1 (z++執行,且前一個數為 z++,故 z2 的值為 1)
z3 = 2 (因為前一個數為 z++,所以到這邊時 z=2,得到 z3 = z = 2)
z1 + z2 + z3 = 0 + 1 + 2 = 3 => 得到 列印值 = 3 , z = 2

Q6. ++z + z++
z = 0 , z1 = ++z , z2 = z++
z1 =1 (++z 運算前即會執行,得到 z = 1)
z2 =1 (z++執行,但 z2 的值仍為 1)
z1 + z2 = 1 + 1 = 2 => 得到 列印值 = 2 , z =2

III. 小結

以上各題用程式的執行結果
列印出來的第2個值為計算完的 z 值 (可對照上列算式結果)

如果還有不清楚的部分歡迎留言討論 ^^

沒有留言:

Google Spreadsheet 裡用規則運算式

最近因為工作關係,遇到要用 Google Form 及 Google Sheet 所以研究了 Google Sheet 裡的一些 function 怎麼用 首先,分享一下如何在 Google Sheet 裡用規則運算 :D