[問題] 這樣可以比較嗎?

看板C_and_CPP作者 (奇怪 還沒收到??)時間15年前 (2010/04/25 14:56), 編輯推噓0(0031)
留言31則, 4人參與, 最新討論串1/1
請問宣告如下: int c2 = 3; char c3 = '3'; 如何讓c2 和c3 能夠去比較大小 還是沒辦法... (2) 是不是不管我存的資料型態是什麼 宣告的資料型態並不會影響到顯示 只要找出對應的%~即可正確顯示? char c1 = 'a'; int c5 = 'a'; 測試是只要我用printf("%c",~); ~放的是c1 或c5都可以正確顯示 為什麼呢?... 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.123.104.54 ※ 編輯: m13m13m 來自: 140.123.104.54 (04/25 15:01)

04/25 15:03, , 1F
(1)c2 + '0' == c3
04/25 15:03, 1F

04/25 15:04, , 2F
(2)char和int只差在儲存資料的大小 內容是啥不歸他管
04/25 15:04, 2F

04/25 15:06, , 3F
(1)有些編譯器會說資料長度不同 轉型後就不會有訊息了
04/25 15:06, 3F

04/25 15:09, , 4F
請問h大 為什麼(1) 是資料轉型嗎? 規則是甚麼阿...
04/25 15:09, 4F

04/25 15:10, , 5F
也會有資料轉型的問題 有些compiler會報warning
04/25 15:10, 5F

04/25 15:10, , 6F
不過之所以可以這樣比是因為char存文字是以ASCII碼存的
04/25 15:10, 6F

04/25 15:11, , 7F
所以c2 + '0' 東西是 char資料型態嗎? (頭昏...)
04/25 15:11, 7F

04/25 15:13, , 8F
不是哦 如果以(1)這個例子來看 他會先把'0'(char:48)
04/25 15:13, 8F

04/25 15:13, , 9F
提升成(int 48) 然後跟c2加起來變成(int 51)
04/25 15:13, 9F

04/25 15:14, , 10F
把c3的'3'(char:51)提升成(int:51) 兩個再拿來比
04/25 15:14, 10F

04/25 15:14, , 11F
最後就是(int:51)和(int:51)比了
04/25 15:14, 11F

04/25 15:14, , 12F
挖~ 怎麼提升的阿? 只要加上int資料型態的變數 就可以了
04/25 15:14, 12F

04/25 15:15, , 13F
+ (變數) ps:int 變數
04/25 15:15, 13F

04/25 15:15, , 14F
轉換的規則可以查一下手上的書或cplusplus 應該都會寫
04/25 15:15, 14F

04/25 15:16, , 15F
這是C/C++的隱式轉換 有他一定的規則
04/25 15:16, 15F

04/25 15:16, , 16F
請問如果我要把c2裡頭的3 拿出來成int 來用可以嗎?
04/25 15:16, 16F

04/25 15:20, , 17F
不懂? c2不是本來就是int嗎..||
04/25 15:20, 17F

04/25 15:22, , 18F
說錯 是c3 因為我得用char來存integer可是我卻需要計算
04/25 15:22, 18F

04/25 15:22, , 19F
integer的資料 (int)c3 好像不行?
04/25 15:22, 19F

04/25 15:38, , 20F
thank you 我正在念 implicit type conversion.
04/25 15:38, 20F

04/25 15:57, , 21F
如果是要把c3的'3'存成整數的3 那就反過來c3 - '0'就行了
04/25 15:57, 21F

04/25 15:57, , 22F
至於是用int還是char存 僅在資料長度不同的差別而已
04/25 15:57, 22F

04/25 15:58, , 23F
你char a=3; char b=3;和 int a=3;int b=3;算出來除了資料
04/25 15:58, 23F

04/25 15:58, , 24F
型態一個是char一個是int外 裡面存的東西是一樣的
04/25 15:58, 24F

04/25 19:38, , 25F
事實上,你只要把這兩個變數想成不同長度的int就好了
04/25 19:38, 25F

04/25 19:40, , 26F
不同長度的int互相比較,有什麼危險?應該不難想到
04/25 19:40, 26F

04/25 19:41, , 27F
一個只能表示0和1的型態,和一個能表示1到100的變數
04/25 19:41, 27F

04/25 19:42, , 28F
的確 比起char、int這種東西 FP的轉換相對比較容易出錯
04/25 19:42, 28F

04/25 19:42, , 29F
最容易犯的錯就是拿double來比較相等..這是不精準的
04/25 19:42, 29F

04/25 19:43, , 30F
的確可以比較,但轉型後,也幾乎沒有比較的價值
04/25 19:43, 30F

04/25 19:43, , 31F
尤其是在做過乘、除法運算之後
04/25 19:43, 31F
文章代碼(AID): #1Bq-UECf (C_and_CPP)