看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《yauhh (喲)》之銘言: : 當然善用shortcut-circuit evaluation寫邏輯句子很容易: : (data == NULL) && printf("Data not found.") : || (checkData(data) != 0) && printf("Data is invaild.") : || (modifyData(data) != 0) && printf("Data modification failed.") : || (fireDataChanged(data) != 0) && printf("Observer call failed.") : || (saveDataIntoFile(data) != 0) && printf("Data storage failed.") : || printf("Finally succeed..."); : 邏輯運算一般是 && 優先權高於 ||. : → bdvstg:我看不懂... >"< 判斷&&列印||判斷&&列印...; 12/07 09:12 班門弄斧一下: 這樣的邏輯判斷其實只要知道"||"跟"&&"運算子的行為,其實並不難理解。 ||運算子的情況: A || B A和B只要其中一個成立(為TRUE),運算式即成立 如果A成立 => 運算式成立 (不做B,B會直接被忽略) A不成立 => 檢查B是否成立(做B) &&運算子的情況: A && B A和B兩者皆必須成立(皆為TRUE),運算式才成立 如果A成立 => 檢查B是否也成立(做B) A不成立 => 運算式不成立 (不做B,B會直接被忽略) 再回到yauhh板友的sample: 因為&&優先度高於||,所以你可以這樣看 ╭ A1╮ ╭ B1╮ ╭ A2╮ ╭ B2╮ ( 判斷(1) && 列印(1) ) || ( 判斷(2) && 列印(2) ) ...下略 ╰────α────╯ ╰────β────╯ &&運算子的情況: 如果A1成立 => 檢查B1是否也成立(做B1) 判斷(1)成立 => 印錯誤訊息 (data == NULL) printf("Data not found.") 如果A1不成立 => 運算式α不成立(不做B1,B1會直接被忽略) (data != NULL) 但是因為後面還有||運算子,所以 ||運算子的情況: α不成立 => 檢查β是否成立(做β) 而運算式β又是一個&&運算式,所以又回到上面 &&運算子的情況 依此類推 -- 打完之後才發現光用文字解釋沒有想像中的容易orz 真是佩服板上的圖文詳解強者... -- ╭──╮┌──╮╭──╮╭──╮╭──╮╭─╮╮╭─╭╮ │ ││ ││ ││ ││ ││ │││ ││ NO16 │ ├╮│ ─┤│ ┘││ ││ ─ ││ ││ │█      █nyctenvoy │ ││ ─┤│╮╭╯│││││╭╮│││ │╰╮╭╯█ ██ ██ ███ ╰──╯└──╯╰╯╰ ╰╯╯╯╰╯╰╯╰╯─╯ ╰╯ ██ █▆◢ ▉█ ▊▊█ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.136.254.32
loveme00835:I don't care. 我不知道他在做啥不是我看不懂, 而是看 12/07 12:15
loveme00835:到 && 就沒繼續下去的必要 12/07 12:15
bdvstg:看懂了.... 感恩~~ (之前不曾想過可以這樣用) 12/07 12:41
lwecloud:我只是針對語意上面解釋,至於這種做法好不好,我想我 12/07 13:43
lwecloud:還是留給其他人評論吧XD 12/07 13:44
lwecloud: 應該說語法才對 12/07 13:44
awashharp:圖好精美XDDDD 12/07 15:56
yoco315:大哥,比起此串第三篇,這個寫法你花了一篇文章來解釋 12/07 19:42
yoco315:要說這個多好讀實在是騙鬼阿.. 好讀不好讀是相對的.. 12/07 19:43
yoco315:比起組合語言這大概是好讀啦,但是明明還很多比這好的寫法 12/07 19:43
yauhh:你的圖解超酷的 :D 12/07 19:51
bobhsiao:推~~有圖解 12/08 10:05