看板 C_and_CPP 關於我們 聯絡資訊
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: 常常看到這種判斷 if(!a) ..... 這是判斷參數a是否為1的條件事嗎? 開發平台: 通吃啦 那反過來可否這樣寫 if(a) ..... 與上面相反 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 112.104.70.177
MOONRAKER:不是,是判斷是否為0。(差別很大喔!) 11/25 02:23
joefaq:其實!a 如果不是bool的話 其實是不好的寫法 11/25 03:40
twotwoone:怎麼說呢?請教一下,哪種寫法的 !a 可能會有問題 11/25 04:04
iwayne:如果a不是bool的型別,那a與!a就不只有0,1兩種情況, 11/25 08:17
iwayne:所以可能容易引起邏輯上的誤判。j大應該是這樣的意思吧. 11/25 08:18
ledia:可以告訴我如何讓 !a 不是 0 或 1 嗎? 11/25 08:37
lwecloud:應該講0或非0吧? 11/25 09:01
twotwoone:if()對於條件成立與否(true or false),應該只是看是否 11/25 09:40
twotwoone:裡面的的值為0。而根據VC顯示反組譯碼,!a就只會傳回1,0 11/25 09:40
twotwoone:當然不考慮運算子被 overloaded 的特殊情況 11/25 09:41
VictorTom:推221大的說明:) 小弟記得以前好像也在裡推過.... 11/25 09:58
VictorTom:其實bool也只是一個數, 型態可能等於uchar, 值為0或1. 11/25 09:59
VictorTom:判斷條件0->false, 非0->true; 結果false->0, true->1 . 11/25 10:00
VictorTom:if(!a)其實相當於把上面的過程各跑了一兩次這樣@_@" 11/25 10:02
VictorTom:不過聰明的compiler可能可以只翻出更精簡的指令吧:) 11/25 10:04
realmeat:c是沒boolean型態 if內只判斷0跟非0 11/25 10:08
kikiqqp:! 就反轉 真為假 假為真 11/25 13:05
pichubaby:如果我說可以代換成"0==" 這樣的話正確嗎? 11/25 17:41
nowar100:C99以後就有boolean了 http://0rz.tw/FWkp3 XD 11/25 17:50