[問題] 含賦值的布林運算式,值該如何判斷

看板C_and_CPP作者 (↙㊣煞氣a萬華何潤東㊣↗)時間10年前 (2013/10/24 23:04), 編輯推噓4(4022)
留言26則, 11人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) GCC 這陣子看到一個邏輯是非題判斷的題目,讓新手小弟我有點困惑 是這樣的.... 邏輯判斷以下方法對/錯: a= 100 && a= 99; a==100 && a= 99; a= 100 && a==99; a==100 && a==99; a= 100 || a= 99; a==100 || a= 99; a= 100 || a==99; a==100 || a==99; 兩條件用&&判斷是常見的 但&&左右兩邊附值...小弟孤陋寡聞完全沒看過 不知道板上高手有沒有可以解惑這種用法以及用在哪裡????? 弱弱書生跪求<(_ _)> 感謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.118.202.109 ※ 編輯: Onnnnnnnnnnn 來自: 140.118.202.109 (10/24 23:05)

10/24 23:07, , 1F
(a=99) 就是 return a 在 assign 完畢後的值
10/24 23:07, 1F

10/24 23:07, , 2F
第一個就語法錯誤啦
10/24 23:07, 2F

10/24 23:08, , 3F
TFFF TTTF
10/24 23:08, 3F

10/24 23:08, , 4F
然後這種東西的用途就是激怒你的同事上司害你丟工作
10/24 23:08, 4F

10/24 23:08, , 5F
那用在這邊, 0 是 false, 0 以外的值都是 true
10/24 23:08, 5F

10/24 23:10, , 6F
對耶, 沒加括號就 error 了, 我沒注意到 XD
10/24 23:10, 6F

10/24 23:11, , 7F
我有看過面試考這種鬼東西的... 到底有什麼意義...
10/24 23:11, 7F

10/24 23:24, , 8F
應該是給 if (a=1) 這種鳥程式整到抓狂的人出的?
10/24 23:24, 8F
小弟剛剛用gcc測的結果如下 a= 100 && a= 99; 錯 error: lvalue required as left operand of assignment a==100 && a= 99; 錯 a= 100 && a==99; 過 a==100 && a==99; 過 還是看不出甚麼規則端倪出來,跪求版友提點阿!! 若沒刮號下, 優先順序如下: 1.== 2.&& 3.= 若判斷是左右兩邊有刮號就沒問題 ※ 編輯: Onnnnnnnnnnn 來自: 140.118.202.109 (10/24 23:34)

10/24 23:30, , 9F
還好上面這樣寫 -Wall 就會有 warning 了...
10/24 23:30, 9F

10/24 23:30, , 10F
這個 bug 真的是超整人, 所以有人習慣顛倒寫 if (1==a)
10/24 23:30, 10F

10/24 23:37, , 11F
照你寫的優先順序規則把括號補上你就懂了
10/24 23:37, 11F

10/24 23:39, , 12F
我是一直背不起優先順序,只好猛加括號,加得像魚鱗似的
10/24 23:39, 12F
感謝各位熱情回答 不過好奇 運算子優先順序表 大家有背起來嗎.... 我遇到這種問題 手邊沒順序表只能瞎猜順序了 還是有人分享一下順序表的記憶方法嗎 哈哈哈 不過還是非常感謝熱情的c板友!!!!!! ※ 編輯: Onnnnnnnnnnn 來自: 140.118.202.109 (10/24 23:57)

10/24 23:54, , 13F
1.運算子優先順序=最後 2.=左邊必須放l-value
10/24 23:54, 13F

10/24 23:57, , 14F
第一個a = ((100 && a) = 99) 100 && a不是l-value
10/24 23:57, 14F

10/25 00:58, , 15F
assign= 是右結合律,所以右邊比較大
10/25 00:58, 15F

10/25 01:16, , 16F
不要背順序表 乖乖加括號或分好幾步做
10/25 01:16, 16F

10/25 01:37, , 17F
乖乖加括號才是真的
10/25 01:37, 17F

10/25 01:39, , 18F
多寫就會記住常用的幾種了括號太多別人接你code會很痛苦
10/25 01:39, 18F

10/25 01:57, , 19F
我不這麼認為。順序 & 大於 == 大於 && 大於 &=
10/25 01:57, 19F

10/25 01:58, , 20F
這我如果不加括號, 下一個接手的苦主不見得有背熟...
10/25 01:58, 20F

10/25 02:00, , 21F
當然寫得太雜亂也是不容易看懂, 但那是編排方面的議題了
10/25 02:00, 21F

10/25 02:50, , 22F
括號只要不要 ((( ))) 擠在一起應該都很容易懂的
10/25 02:50, 22F

10/25 05:28, , 23F
樓上的意思是不要寫 lisp
10/25 05:28, 23F

10/25 13:13, , 24F
沒事寫LISP幹嘛 :P 連續括號就儘量用空白和換行分開吧
10/25 13:13, 24F

10/25 15:05, , 25F
我們沒教LISP而是教Scheme,有很可愛的彩虹括號編輯器
10/25 15:05, 25F

10/25 15:54, , 26F
彩虹括號 XDDD
10/25 15:54, 26F
文章代碼(AID): #1IQJSJ34 (C_and_CPP)