[問題] 自動轉型別的問題

看板C_and_CPP作者 (非常念舊)時間5年前 (2018/08/19 10:36), 5年前編輯推噓4(407)
留言11則, 6人參與, 5年前最新討論串1/1
網路上有一個考題 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

08/19 10:41, 5年前 , 1F
有轉 -20變uint就是很大的數字沒錯
08/19 10:41, 1F

08/19 11:38, 5年前 , 2F
我推薦使用typeof看型別
08/19 11:38, 2F

08/19 12:09, 5年前 , 3F
現在compiler會噴warning, 然後設定把warn當error,要你別醬
08/19 12:09, 3F

08/19 14:20, 5年前 , 4F
非零的時候才會是false的話 你肯定是誤會了XD
08/19 14:20, 4F
※ 編輯: gn00618777 (219.68.215.61), 08/19/2018 15:48:24 ※ 編輯: gn00618777 (219.68.215.61), 08/19/2018 15:48:33

08/19 15:49, 5年前 , 5F
抱歉 我手誤 應該是只要非0 都是 true
08/19 15:49, 5F

08/19 16:15, 5年前 , 6F
第一個要考轉型別的話 應該是要寫 ((a+b) > 6) ? put
08/19 16:15, 6F

08/19 16:15, 5年前 , 7F
s(">6") ... ?前面是一個布林運算式
08/19 16:15, 7F

08/19 16:17, 5年前 , 8F
第二個的話 printf它會根據你給個%d %u來決定變數輸出
08/19 16:17, 8F

08/19 16:17, 5年前 , 9F
的時候的型別是什麼 你給%d 它就把存在那個變數的記
08/19 16:17, 9F

08/19 16:17, 5年前 , 10F
憶體值當作int
08/19 16:17, 10F

08/19 16:25, 5年前 , 11F
第一個的考法也有直接比較 (a > b )這樣的
08/19 16:25, 11F
文章代碼(AID): #1RUDUbx7 (C_and_CPP)