看板 Examination 關於我們 聯絡資訊
大家好 小弟想請教100年的中華電信 程式設計與資料庫裡面的題目 其中程式碼如下 int a=5, b=0, c=6; a = (a = b)&&(c = b); 問最後abc值為何 最後得結果為a=0 b=0 c=6 找到的解答理由是第二行的後面並不會真正改變a和c的值 然後第二行後面兩個等號看做比較的意思 所以a=false && false => 0 但後來小弟做了兩個測試 就跑出了新的疑問 希望有前輩能指引 1. int x=2,y=4,z=6; x= (y=z); 為何最後x y z皆為6 是否跟題目的狀況有什麼不同呢 2. 若把題目改成 int a=5, b=1, c=6; a = (a = b)&&(c = b); 為何最後輸出結果卻是a=1 b=1 c=1呢 似乎跟前面查到的解就有所不同 不好意思問題有點多 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.164.142.72 ※ 文章網址: https://www.ptt.cc/bbs/Examination/M.1501208687.A.C15.html
yugichen95: 這應該是考布林值短路運算,&&左邊括號只要是0(false) 07/28 11:40
yugichen95: 右括號就不會再run因為確定整個為false;反之左邊為1(t 07/28 11:40
yugichen95: rue)就會需要run右邊,另外你第一點跟這個無關。 07/28 11:40
原來如此 因為題目變化一多就忘記上一篇提到的東西了 謝謝兩位提醒 另外想請問第一點能稍微提點一下嗎
Hsiner: 跟上一篇問的捷徑運算一樣的意思。&&前如果是0,&&後面不 07/28 11:41
Hsiner: 會執行。&&前是1, 後面會執行 07/28 11:41
那這樣看起來我找到的解答似乎有誤 確實第一個等號後面是會改變值的... ※ 編輯: shinenic (1.164.142.72), 07/28/2017 11:59:30
pt7441: 捷徑運算 T|| 跟 F&& assign右邊做完才給左邊值 07/28 12:29
pt7441: 我想你第一個問題大概是不知道怎麼算a吧 右邊算完F=0 T=1 07/28 12:30
ym7834: 判斷式為false 07/28 12:52
ym7834: 所以是a=false 07/28 12:52
ym7834: => a=0 07/28 12:52
感謝各位大大的解釋 ※ 編輯: shinenic (1.164.142.72), 07/28/2017 12:54:56
pts411: 上述關點可朝 捷近條件 與 指派的非零則真(C語言) Google 07/28 14:14
pts411: 查詢。 07/28 14:14
pime: 借問一下 那為什麼第二題前面a=(a=b)是f後面還會繼續執行呢 07/28 14:22
pime: ? 07/28 14:22
uni1021: a=(a=b)是true 所以繼續判斷右邊 07/28 14:27
pime: 剛剛用程式跑了一下 發現b只要不是代0,a就會是1就是t是這 07/28 14:30
pime: 個意思嗎 07/28 14:30
jachin: 請先看前一篇的推文已經說明很清楚。另外捷徑運算是用在an 07/28 14:52
jachin: d 和or的比較,你自己題目的"="是asige的功能,不是比較, 07/28 14:52
jachin: 不會進入捷徑運算。 07/28 14:52