國立彰化師範大學

#新手 #C 運算子問題

2020年10月26日 00:55
想請教各位大神 int x = 3, y = 4, z = 4; x = x >= y >= z; 上面這串我把他理解成x >= y && y >= z 所以執行上面這串之後,x會顯示為0(假) 但是我發現把x改成4之後 int x = 4, y = 4, z = 4; x = x >= y >= z; 照理說這串執行下來要顯示1的呀 怎麼run出來是0... (有記得compile) 而且如果改寫成比較合理的樣子的時候 int x = 4, y = 4, z = 4; x = x >= y && y >= z; x值又會正常(如預期的)顯示出1 麻煩了...不確定是在校版發還在這裡發 感謝!
1
回應 6
文章資訊
Logo
每週有 29 則貼文
共 6 則留言
淡江大學
x >= y >= z 不代表 x >= y && y >= z,但我不是大神QQ
輔仁大學
x>=y 4>=4是true會變1 1>=z 1>=4是false會變0
元智大學
運算子的不等式跟數學上的表達不太一樣 他在執行的時候其實是先把第一組算出來再算第二組 所以如同樓上所說的: x = x >= y >= z; 會變成: x = (x >= y) >= z; 以你的例子 x = 3, y = 4, z = 4; 來說,會變成: x = (3 >= 4) >= 4; x = (false) >= 4; false 在運算時被強制轉型成 int,會被當作 0 ,所以 x = (0) >=4; x = false; 然後因為你把 x 宣告成 int ,所以會再被轉型成 0 正確的寫法會是:x >= y && y >=z; 補充個人意見, 雖然在程式語言當中 true 會被當成 1 ,false 會當成 0 , 但既然你在寫的是強型別的語言,還是盡量用他原本的型態比較不會混淆 例如在你的例子中, 我可能會多宣告一個 boolean 變數來儲存結果,而不是直接用int bool xIsMax = x >= y && y >=z;
淡江大學
你的想法,python可以做到,但C語言就沒這麼智慧了
國立中正大學
個人覺得不用執著在這種地方啦,反正你以後也不可能寫出這麼難懂的程式碼😅(當然搞懂是很好啦,個人淺見,不要炮我
原 PO - 國立彰化師範大學
不好意思這麼久才回來回覆,感謝樓上幾位的解說(現在回過頭來看都是正確的!),類似這種題目目標應該都是想讓我們瞭解和習慣語言邏輯(優先順序、指標如何運作之類),再次感謝!