Try   HackMD
tags: 大一程設 東華大學 東華大學資管系 基本程式概念 資管經驗分享

int、double、float、char、bool 混在一起怎麼辦?

前言

程式語言提供許多工具讓設計師、開發者使用,不過你是不是正確的使用這些工具是很重要的,而前面有提到變數對設計師來說是最重要的工具之一,每一個變數都會有他代表的意義與型態(data type),所以設定好正確的型態非常重要。

這份筆記想傳達一些新手會常犯的錯誤,把資料型態不同的變數進行相加,這是會有一些大家想不到的結果的,所以要養成相同類型的變數才能做共同的處理的習慣

int、double、float、char、bool 混在一起怎麼辦?

話不多說,我們直接看程式碼。

double / float v.s. int

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

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

所以你可以發現在 2 進制底下的 65 被規定為大寫的 A,而其他的字母也有相對應的表達,所以這就是為什麼在 C++ 裡會印出 65 的原因。

而隨著技術的演進,電腦編碼系統也越來越多,當然你現在能在任何的電腦系統看到中文字,也是在後來被編進編碼系統裡面,而中文最令人熟知的就是 「big-5」,也就是我們俗稱的「大五碼」

big5 - wiki

至於剩下的內容我不多說,詳細請左轉計概。

所以同理,為什麼 letter 會印出 A,你們應該也可想而知了,同樣也是因為 ASCII。

bool v.s. int

這個在當初介紹 bool 的時候介紹過了,可以去看第二章 ppt 的第 48 頁。