看板 ask-why 關於我們 聯絡資訊
※ 引述《sthouse (S踢房子(糟糕島民))》之銘言: : ※ 引述《aaronleo (拉拉~)》之銘言: : : 有兩題程式語言的題目 : : 找來找去都沒有相關的解答 : : 第一題是 : i++代表的意思是? : : 解答為: i←i+1 : : 可是我還是不曉得這樣是什麼意思 : i++ 就是i+1的意思 : 也有++i的用法,不過有一些差別 : 在同一行執行時當i=0,i++ 和++i : 其中一個會顯示i=1,另一個會顯示i=0 簡而言之 就是程式設計師懶惰的結果 i++ 原本 要寫成 i=i+1 因為太常用了 所以簡寫 解答 寫i←i+1 是因為 i=i+1 是不符合數學邏輯的 因為程式中 = 跟數學中的= 意義不同 不過在計概中 答案如果寫 i=i+1 應該也算對 如果老師打錯 那就是 迂腐的老師了 i←i+1 就是 把i+1 這個數值 放入i 之中 i是變數 你可以想像成一個容器 當你看到 i=0 就是 把0放到 i中 而 i=i+1 就是 先把i這個容器內的數值 +1 之後 再放入i這個容器中 所以現在 i這個容器 放的值就是 1 再遇到這個 指令 一次 i 的值就會再加1 : : 第二題是: : : X = 0 : 設定x初始值為0 : : For (i=0; i<5; i++) : 迴圈跑6次,也就是i的初始值為0 : 當i小於五時執行底下的迴圈,後面就是讓i每執行一次加1 : : X = X + 3; : 執行這個迴圈時,每次x就加3,加完之後放回去x的暫存器裡面 : : 解答為18 沒有解釋運算過程@_@ : : 不曉得有沒有人能解答這兩題呢 : : 感激不盡 謝謝 x=0 for 迴圈開始 i=0 判斷 i是否小於5? 是 執行 i++ 即 i+1 此時 i=1 執行X = X + 3 -->X=3 回到迴圈 i=0 不會再執行(只執行一次 初始動作) 此時 i=1 判斷 i是否小於5? 是 執行 i++ 即 i+1 此時 i=2 執行X = X + 3 -->X=6 回到迴圈 i=0 不會再執行(只執行一次 初始動作) 此時 i=2 判斷 i是否小於5? 是 執行 i++ 即 i+1 此時 i=3 執行X = X + 3 -->X=9 回到迴圈 i=0 不會再執行(只執行一次 初始動作) 此時 i=3 判斷 i是否小於5? 是 執行 i++ 即 i+1 此時 i=4 執行X = X + 3 -->X=12 回到迴圈 i=0 不會再執行(只執行一次 初始動作) 此時 i=4 判斷 i是否小於5? 是 執行 i++ 即 i+1 此時 i=5 執行X = X + 3 -->X=15 回到迴圈 i=0 不會再執行(只執行一次 初始動作) 此時 i=5 判斷 i是否小於5? 不是 離開迴圈 不再 執行X = X + 3 所以 X=15 : 基本上這是很基本的程式,也不是這個版的主旨就是了...(也就是PO錯版) : 如果不確定,就輸入到程式裡面去跑就知道了 : 用單步執行去看暫存器狀態最容易了解 可能那個版的高手 解釋出來 他也不容易懂吧 所以我試解釋看看 -- 台灣的亂源在媒體與政客 媒體與政客會成亂源的原因在教育 關心教育 支持教育改革 才是擺脫此混亂的的根本之道 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.134.48.9
slzhao:對"程式設計師偷懶"有點不同的見解.在早期的CPU,累加的執行 01/16 08:07
slzhao:速度跟直接加一個數值是不同的,這樣寫可明確告訴CPU用累加 01/16 08:08
slzhao:而非用一般的加法,對程式最佳化有幫助. 01/16 08:09
andrew43:推本文作者與一樓 01/16 08:16
littleshan:寫 i=i+1 也可以 optimize 啊...compiler 沒那麼笨 01/16 09:19
H45:因為低階語言的ADD指令和INC指令的效能是有差的 01/16 10:15
H45:另外在Z Spec中,i++是否可以表示成i'=i+1? 01/16 10:16
littleshan:add 和 inc 不一定有差 要看 architecture 01/16 11:43
H45:同一個architecture會有相同的instruction set吧? 01/16 14:10
H45:也許樓上上指的是organization? 01/16 14:12
H45:不過我們應該只是討論為什麼有i++吧.... 01/16 14:16
H45:我認為原因就是一樓說的,ADD指令和INC指令的差異 01/16 14:18