[問題] 有關於左結合或右結合的問題

看板C_and_CPP作者 (考過換帳號)時間12年前 (2012/02/24 14:06), 編輯推噓2(3112)
留言16則, 8人參與, 最新討論串1/1
版上鄉民大家好XD 小弟有個關於結合性的問題不大懂 想請問大家^^ 以下是程式碼 int main(){ int i=-3 ,j=2 ,k=0,m; m = ++i && ++j || ++k; printf("%d, %d, %d, %d\n", i, j, k, m); system("pause"); return 0; } Output是: -2, 3, 0, 1 看不懂 k 和 m 的output為什麼是0和1 >< 煩請知道的鄉民解答~ 感恩~ 謝謝^^ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.162.195.83

02/24 14:15, , 1F
月經文 偷噓一下
02/24 14:15, 1F

02/24 14:16, , 2F
估狗short circuit
02/24 14:16, 2F

02/24 14:37, , 3F
++k 不曾執行過 , bool 的true 對 int 而言是 1
02/24 14:37, 3F

02/24 15:10, , 4F
八戒!
02/24 15:10, 4F

02/24 15:20, , 5F
回樓上應該不算吧~?
02/24 15:20, 5F

02/24 15:30, , 6F
xatier那個不是
02/24 15:30, 6F
大家好^^ 抱歉小弟程式能力很弱+爬文不周>< 因為不是這個版的常客 所以不知道這問題是月經文 真的很抱歉~ 得罪的地方請多見諒^^ 想請問為什麼++k不曾執行過呢?

02/24 16:20, , 7F
當A || B,A為T時,B不會執行。
02/24 16:20, 7F
感謝回答^^ 這樣的話m = ++i && ++j執行後m為什麼會變成1呢 我是想: 0 <- 0 && 1 有錯煩請指證^^

02/24 17:02, , 8F
常常有人發問的文=月經文
02/24 17:02, 8F
哈哈~ a大這個我知道XD

02/24 17:41, , 9F
1 && 1 斷掉
02/24 17:41, 9F

02/24 19:18, , 10F
守則8,還有short什麼的忘了
02/24 19:18, 10F

02/24 20:27, , 11F
這邊並沒有觸犯守則8,因為該行中ijkm都只被給值一次
02/24 20:27, 11F

02/24 20:28, , 12F
c和c++可以允許把不是bool的變數當作真假值
02/24 20:28, 12F

02/24 20:29, , 13F
沒錯,不是8戒xdd是short circuit
02/24 20:29, 13F

02/24 20:29, , 14F
只要該變數不為0就會當作true,所以++i會被解釋為true
02/24 20:29, 14F

02/24 20:33, , 15F
原po可能以為負數會被當作false吧,實際上與正負無關
02/24 20:33, 15F
對吼!!!!!!!!!!!!!! 我徹底忘記不是0就是True了XD 感謝大家的提醒和回答!! 祝大家平安順利^^ ※ 編輯: cisco 來自: 1.162.195.83 (02/24 22:16)

02/25 16:32, , 16F
推太快 看錯 orz
02/25 16:32, 16F
文章代碼(AID): #1FHoZtvb (C_and_CPP)