--- GA: G-RZYLL0RZGV --- ###### tags: `大一程設` `東華大學` `東華大學資管系` `基本程式概念` `資管經驗分享` int、double、float、char、bool 混在一起怎麼辦? === [TOC] ## 前言 程式語言提供許多工具讓設計師、開發者使用,不過你是不是正確的使用這些工具是很重要的,而前面有提到變數對設計師來說是最重要的工具之一,每一個變數都會有他代表的意義與型態(data type),所以設定好正確的型態非常重要。 這份筆記想傳達一些新手會常犯的錯誤,**把資料型態不同的變數進行相加**,這是會有一些大家想不到的結果的,**所以要養成相同類型的變數才能做共同的處理的習慣**。 ## int、double、float、char、bool 混在一起怎麼辦? 話不多說,我們直接看程式碼。 ### double / float v.s. int ```cpp= int main(){ int a = 5; double b = 3.05; a = b; } ``` 上面的例子會發生甚麼事? a 究竟是 3、3.05、還是 5? 如果你看過前面的筆記,你一定不會說是 5,因為我們是把 b 變數的值指派給 a 變數,但因為 a 是整數型態的變數,所以只能存整數,因此答案是 3,可以得知,整數型態會自動捨去後面的小數位數。 那 float 跟 double 都是浮點數,所以套用在這個情境也一樣哦。 ### char v.s. int ```cpp= int main(){ int value = 'A'; cout << value << endl; //會印出 65 char letter = 65; cout << letter << endl; //會印出 A } ``` 你猜猜答這兩個值分別會是多少? 你可能會疑問,你不是說 int 存整數變數嗎,為什麼可以存字元 A,你在騙我對不對? ### 科普小知識 - ASCII 其實這跟**計算機概論**有關,在電腦的世界裡有一種編碼系統稱為 ASCII,當初電腦在外國創立的時候只能存英文,他們那時候哪知道怎麼存中文,然後 ASCII 總共只能存 128 個字母,因為總共只有 8 bits,只能用 0~127 來代表他們想表達的字。 ASCII 用注音來表示的話我們會發 「阿 斯 ㄎ一 code」,預防以後老師提到你們不知道這是啥,~~我秀個下限~~。 你可能看不太懂,先來看看維基百科。 [ASCII](https://zh.wikipedia.org/wiki/ASCII) 所以你可以發現在 2 進制底下的 65 被規定為大寫的 A,而其他的字母也有相對應的表達,所以這就是為什麼在 C++ 裡會印出 65 的原因。 而隨著技術的演進,電腦編碼系統也越來越多,當然你現在能在任何的電腦系統看到中文字,也是在後來被編進編碼系統裡面,而中文最令人熟知的就是 「big-5」,也就是我們俗稱的「大五碼」 [big5 - wiki](https://zh.wikipedia.org/wiki/%E5%A4%A7%E4%BA%94%E7%A2%BC) 至於剩下的內容我不多說,詳細請左轉計概。 所以同理,為什麼 letter 會印出 A,你們應該也可想而知了,同樣也是因為 ASCII。 ### bool v.s. int 這個在當初介紹 bool 的時候介紹過了,可以去看第二章 ppt 的第 48 頁。