[問題] 一個超級白吃的問題

看板C_and_CPP作者 (老人家)時間14年前 (2009/11/25 02:16), 編輯推噓9(9010)
留言19則, 11人參與, 最新討論串1/2 (看更多)
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: 常常看到這種判斷 if(!a) ..... 這是判斷參數a是否為1的條件事嗎? 開發平台: 通吃啦 那反過來可否這樣寫 if(a) ..... 與上面相反 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 112.104.70.177

11/25 02:23, , 1F
不是,是判斷是否為0。(差別很大喔!)
11/25 02:23, 1F

11/25 03:40, , 2F
其實!a 如果不是bool的話 其實是不好的寫法
11/25 03:40, 2F

11/25 04:04, , 3F
怎麼說呢?請教一下,哪種寫法的 !a 可能會有問題
11/25 04:04, 3F

11/25 08:17, , 4F
如果a不是bool的型別,那a與!a就不只有0,1兩種情況,
11/25 08:17, 4F

11/25 08:18, , 5F
所以可能容易引起邏輯上的誤判。j大應該是這樣的意思吧.
11/25 08:18, 5F

11/25 08:37, , 6F
可以告訴我如何讓 !a 不是 0 或 1 嗎?
11/25 08:37, 6F

11/25 09:01, , 7F
應該講0或非0吧?
11/25 09:01, 7F

11/25 09:40, , 8F
if()對於條件成立與否(true or false),應該只是看是否
11/25 09:40, 8F

11/25 09:40, , 9F
裡面的的值為0。而根據VC顯示反組譯碼,!a就只會傳回1,0
11/25 09:40, 9F

11/25 09:41, , 10F
當然不考慮運算子被 overloaded 的特殊情況
11/25 09:41, 10F

11/25 09:58, , 11F
推221大的說明:) 小弟記得以前好像也在裡推過....
11/25 09:58, 11F

11/25 09:59, , 12F
其實bool也只是一個數, 型態可能等於uchar, 值為0或1.
11/25 09:59, 12F

11/25 10:00, , 13F
判斷條件0->false, 非0->true; 結果false->0, true->1 .
11/25 10:00, 13F

11/25 10:02, , 14F
if(!a)其實相當於把上面的過程各跑了一兩次這樣@_@"
11/25 10:02, 14F

11/25 10:04, , 15F
不過聰明的compiler可能可以只翻出更精簡的指令吧:)
11/25 10:04, 15F

11/25 10:08, , 16F
c是沒boolean型態 if內只判斷0跟非0
11/25 10:08, 16F

11/25 13:05, , 17F
! 就反轉 真為假 假為真
11/25 13:05, 17F

11/25 17:41, , 18F
如果我說可以代換成"0==" 這樣的話正確嗎?
11/25 17:41, 18F

11/25 17:50, , 19F
C99以後就有boolean了 http://0rz.tw/FWkp3 XD
11/25 17:50, 19F
文章代碼(AID): #1B32C7PU (C_and_CPP)
文章代碼(AID): #1B32C7PU (C_and_CPP)