【C++ 筆記】資料型態 / 變數 - part 2 === 目錄(Table of Contents): [TOC] --- 很感謝你點進來這篇文章。 你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧! 資料型態(or 資料型別:Data Type) --- 資料型態,也有很多人稱資料型別,其實都一樣意思,都叫做 Data Type。 問題來了,啥是資料型態呢?簡單來說,就是~~資料的型態~~。 咳、咳(清嗓),正確來說,在數學上我們將實數分為有理數、無理數,有理數又可分為整數跟小數,就是差不多這個概念啦! ***所以資料型態就是將資料分類成不同的類別。*** 那另外呢,因為我們程式在執行的時候,需要在記憶體空間當中運算並且儲存這些資訊,而每個資料型態都是不同的個體,每個資料型態的儲存容量也不太一樣,所以接下來資料型態你會看到有它的範圍所在。 好的,接下來是C++的基本內建型態: ### 內建型態(Built-in Type) --- * bool - 布爾型態 or 布林型態 * char - 字元型態 * int - 整數型態 * float - 浮點數型態 * double - 雙浮點數型態 * void - 虛無型態(無型態) | 型態 | 位元 | 範圍 | | -------- | -------- | -------- | | char | 1個位元組 | -128 到 127 或者 0 到 255 | | unsigned char | 1個位元組 | 0 到 255 | | signed char | 1個位元組 | -128 到 127 | | int | 4個位元組 | -2147483648(負的2的31次方) 到 2147483647(2的31次方減1) | | unsigned int | 4個位元組 | 0 到 4294967295 | | signed int | 4個位元組 | -2147483648 到 2147483647 | | short int | 2個位元組 | -32768 到 32767(2的15次方減1) | | unsigned short int | 2個位元組 | 0 到 65,535 | | signed short int | 2個位元組 | -32768 到 32767 | | long int (long、signed long int) | 4個位元組 | -2147483648 到 2147483647 | | unsigned long int | 8個位元組 | 0 到 18,446,744,073,709,551,615(2的64次方減1) | | float | 4個位元組 | 32位元記憶體空間,3.4E +/- 38 (7 位數) | | double | 8個位元組 | 64位元記憶體空間,1.7E +/- 308 (15 位數) | | long long | 8個位元組 | 64位元記憶體空間,表示 -9,223,372,036,854,775,807 到 9,223,372,036,854,775,807 的範圍 | | long double | 16個位元組 | 128位元記憶體空間,可提供 18-19 位元有效數字。 | 表格參考及擷取至: [C++ 数据类型 | 菜鸟教程](https://www.runoob.com/cplusplus/cpp-data-types.html) [資料類型範圍 | Microsoft Learn](https://learn.microsoft.com/zh-tw/cpp/cpp/data-type-ranges?view=msvc-170) 看到這麼一長串的表格,別緊張,這些完全不用背,只需要記得哪些可以用來做大數運算即可,還有遇到那些輸入不需要負號的資料,那麼就可以使用 unsigned ... 資料型態。 而各個型態的儲存容量大小與系統位數有關係,不過目前通常都是以 64 位元作為主流,不太需要擔心這個的問題。總之,不同作業系統對這個會有影響。 至於要查看資料型態的大小(位元組),我們可以使用指令 sizeof(資料型態) 查看,以下是一個簡單的範例(取自:https://openhome.cc/Gossip/CppGossip/DataType.html): ```c #include <iostream> using namespace std; int main() { cout << "\n型態\t大小(bytes)"; cout << "\nint\t" << sizeof(int); cout << "\nlong\t" << sizeof(long); cout << "\nfloat\t" << sizeof(float); cout << "\ndouble\t" << sizeof(double); cout << "\nchar\t" << sizeof(char); cout << "\n"; return 0; } ``` 看到這程式碼我相信你的第一個念頭一定是想說,\n、\t 是啥啊? 這個東西叫做跳脫字元,主要是由反斜線 "\" 加上其他指定的英文字母組成,每個跳脫字元都有不同的意義,像是 \n 就表示換行的意思,而 \t 表示一個縮排(就是按一下 tab 鍵)。 那,我們要學資料型態幹嘛?到現在我還看不出來耶。 沒關係,下一節告訴你!資料型態其實是有非常大的妙用的! 變數(Variable) --- C++ 的變數宣告如下程式碼: ```cpp int x = 0; ``` int 表示資料型態,x 是變數名稱,0 是變數的值。 變數是拿來幹嘛的呢?用來存放資料型態(含值)的! 我們可以把變數想像成是一個容器,專門用於存放各式各樣的資料型態,像是 int 整數型態。 資料型態就有點像是容器的形狀,有了容器跟形狀以後,我們可以加水(加入數值),凡是容器都有他的上限,所以如果我們將水倒滿了,倒到滿出來時,這個我們在程式設計上稱之為溢位(Overflow)。 溢位時程式會自動變回去最小值。 例如 int 能放的資料有 -2147483648 ~ 2147483647,此時如果 2147483647 再 + 1,則會跑到 -2147483648。 不過話說回來,我們要在 C++ 當中宣告一個變數,需要先提前讓編譯器告知你的變數要存放什麼類型的資料型態。例:int。 再來定義他的變數名稱,之後為他定義一個值。 完整步驟如下: 1. 宣告資料型態。(如:int) 2. 寫變數名稱 3. 寫值 4. 加上你的分號!!!!! 有關於變數名稱其實也有相當大的學問,像是變數名稱大小寫不同就是不同的變數,接下來讓我們看看變數名稱有哪些規則需要注意的吧! ### 識別字(identifier) --- 識別字(identifier),是用來辨識變數、函數的一個規則,也可以把他想像成是各個名稱的命名規則。 一個識別字從英文字母 A-Z or a-z 或 底線 _ 起頭,需要特別注意的是,就只能用「英文字母」、底線 _ 開頭,其他以外的都不行。以上述開頭之後,就可以放入像是數字(0-9)、底線 _ 等等的其他東西都行,但必須注意的是,無論在什麼位置,都不能以特殊字元為識別字,像是 !@#$%^* 這些等等。 而另外一個需要注意的就是,大小寫不同的識別字是不同的識別字。 以變數名稱為例: ```cpp= #include <iostream> using namespace std; int main(){ int x = 0; int X = 1; cout << x << endl; cout << X << endl; return 0; } ``` 輸出結果: ![image](https://hackmd.io/_uploads/HJXz6wxV0.png) 註:endl 表示換行,但其實這跟 "\n" 有些許差別,問就是你自己看這篇:[std::endl ?? - HackMD](https://hackmd.io/@magical/ryMaPoaQ_),不懂的話沒關係。 在上面的程式碼可以看到,小寫 x、大寫 X 的輸出結果是截然不同的。 另外有關於識別字要特別說明的地方,就是關鍵字這個東西。 關鍵字是什麼?用於特定語法上的關鍵字,像是 if、while 等等是關鍵字,舉 if 為例,if 是條件控制的語句,要是變數把這名稱佔走了,那不就用不了條件語句了?所以關鍵字「不得」作為識別字。 ![image](https://hackmd.io/_uploads/ryP8CPgN0.png) 圖片取自:[關鍵字 (C++) | Microsoft Learn](https://learn.microsoft.com/zh-tw/cpp/cpp/keywords-cpp?view=msvc-170) ### 有關變數的小細節 --- 像是 int x = 0; 的那個 "=",大家可能會把它念成 x 等於 0,但這其實是錯的,在程式設計的世界當中,我們稱之為「指定」,我們會說 0 指定給變數 x。 總結 --- 資料型態將資料分類分成很多類別,像是 int、char 等。 資料型態的用途在於程式在執行的時候,需要在記憶體空間當中運算並且儲存這些資訊,而每個資料型態都是不同的個體,每個資料型態的儲存容量也不太一樣,所以資料型態會有它的範圍所在。 變數宣告需遵守以下四步驟: 1. 宣告資料型態。(如:int) 2. 寫變數名稱 3. 寫值 4. 加上你的分號!!!!! -> int x = 0; 識別字能夠作為個別名稱的規範,像是變數命名規則。 識別字有以下規則: 1. 開頭必須以英文字母或底線開頭 2. 不能用特殊字元當作識別字(!@#$%^&*()) 3. 不能用關鍵字當作識別字 等號 "=" 在變數上的說法,我們要說指定,將某值指定給變數。 參考資料 --- [C++ 数据类型 | 菜鸟教程](https://www.runoob.com/cplusplus/cpp-data-types.html) [資料類型範圍 | Microsoft Learn](https://learn.microsoft.com/zh-tw/cpp/cpp/data-type-ranges?view=msvc-170) [內建類型 (C++) | Microsoft Learn](https://learn.microsoft.com/zh-tw/cpp/cpp/fundamental-types-cpp?view=msvc-170#character-types) [C++ 变量类型 | 菜鸟教程](https://www.runoob.com/cplusplus/cpp-variable-types.html) [關鍵字 (C++) | Microsoft Learn](https://learn.microsoft.com/zh-tw/cpp/cpp/keywords-cpp?view=msvc-170) https://openhome.cc/Gossip/CppGossip/DataType.html