看板 C_and_CPP 關於我們 聯絡資訊
網路上有一個考題 unisgned int a = 6; int b = -20; (a+b)?puts(">6"):puts("<6"); Ans: >6 主要是考你 b 會自動轉成 unsigned int ------------------------------------------------------------------------- 我覺得怪怪的。 (-1)?puts(">6"):puts("<6") -->其實也會跑 > 6 (0)?puts(">6"):puts("<6") -->這樣才會跑 < 6 (1)?puts(">6"):puts("<6") -->會跑 >6 總結: 只有在非0時,才會是 true。跟if 和 while 一樣 這其實看不出來是考你自動轉型別。 我再寫一個 unisgned int a = 6; int b = -20; printf("%u\n", a+b); //出現一個很大的未知數字 printf("%d\n", a+b); //-14 這並沒有自動轉型別阿!? 我是不是誤會了甚麼? 謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 219.68.215.61 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1534646181.A.EC7.html
jerryh001: 有轉 -20變uint就是很大的數字沒錯 08/19 10:41
Lipraxde: 我推薦使用typeof看型別 08/19 11:38
xam: 現在compiler會噴warning, 然後設定把warn當error,要你別醬 08/19 12:09
sarafciel: 非零的時候才會是false的話 你肯定是誤會了XD 08/19 14:20
※ 編輯: gn00618777 (219.68.215.61), 08/19/2018 15:48:24 ※ 編輯: gn00618777 (219.68.215.61), 08/19/2018 15:48:33
gn00618777: 抱歉 我手誤 應該是只要非0 都是 true 08/19 15:49
leo850319: 第一個要考轉型別的話 應該是要寫 ((a+b) > 6) ? put 08/19 16:15
leo850319: s(">6") ... ?前面是一個布林運算式 08/19 16:15
leo850319: 第二個的話 printf它會根據你給個%d %u來決定變數輸出 08/19 16:17
leo850319: 的時候的型別是什麼 你給%d 它就把存在那個變數的記 08/19 16:17
leo850319: 憶體值當作int 08/19 16:17
leo850319: 第一個的考法也有直接比較 (a > b )這樣的 08/19 16:25