【C++ 筆記】資料型態 / 變數 - part 2

很感謝你點進來這篇文章。

你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧!

資料型態(or 資料型別:Data Type)

資料型態,也有很多人稱資料型別,其實都一樣意思,都叫做 Data Type。

問題來了,啥是資料型態呢?簡單來說,就是資料的型態

咳、咳(清嗓),正確來說,在數學上我們將實數分為有理數、無理數,有理數又可分為整數跟小數,就是差不多這個概念啦!

所以資料型態就是將資料分類成不同的類別。

那另外呢,因為我們程式在執行的時候,需要在記憶體空間當中運算並且儲存這些資訊,而每個資料型態都是不同的個體,每個資料型態的儲存容量也不太一樣,所以接下來資料型態你會看到有它的範圍所在。

好的,接下來是C++的基本內建型態:

內建型態(Built-in Type)

  • bool - 布爾型態 or 布林型態
  • char - 字元型態
  • int - 整數型態
  • float - 浮點數型態
  • double - 雙浮點數型態
  • void - 虛無型態(無型態)
型態位元範圍
char1個位元組-128 到 127 或者 0 到 255
unsigned char1個位元組0 到 255
signed char1個位元組-128 到 127
int4個位元組-2147483648(負的2的31次方) 到 2147483647(2的31次方減1)
unsigned int4個位元組0 到 4294967295
signed int4個位元組-2147483648 到 2147483647
short int2個位元組-32768 到 32767(2的15次方減1)
unsigned short int2個位元組0 到 65,535
signed short int2個位元組-32768 到 32767
long int (long、signed long int)4個位元組-2147483648 到 2147483647
unsigned long int8個位元組0 到 18,446,744,073,709,551,615(2的64次方減1)
float4個位元組32位元記憶體空間,3.4E +/- 38 (7 位數)
double8個位元組64位元記憶體空間,1.7E +/- 308 (15 位數)
long long8個位元組64位元記憶體空間,表示 -9,223,372,036,854,775,807 到 9,223,372,036,854,775,807(2的63次方減1) 的範圍
long double16個位元組128位元記憶體空間,可提供 18-19 位元有效數字。

表格參考及擷取至:

C++ 数据类型 | 菜鸟教程

資料類型範圍 | Microsoft Learn

看到這麼一長串的表格,別緊張,這些完全不用背,只需要記得哪些可以用來做大數運算即可,還有遇到那些輸入不需要負號的資料,那麼就可以使用 unsigned … 資料型態。

而各個型態的儲存容量大小與系統位數有關係,不過目前通常都是以 64 位元作為主流,不太需要擔心這個的問題。總之,不同作業系統對這個會有影響。

至於要查看資料型態的大小(位元組),我們可以使用指令 sizeof(資料型態) 查看,以下是一個簡單的範例(取自:https://openhome.cc/Gossip/CppGossip/DataType.html):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#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++ 的變數宣告如下程式碼:

1
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)、底線 _ 等等的其他東西都行,但必須注意的是,無論在什麼位置,都不能以特殊字元為識別字,像是 !@#$%^* 這些等等。

而另外一個需要注意的就是,大小寫不同的識別字是不同的識別字。

以變數名稱為例:

1
2
3
4
5
6
7
8
9
10
#include <iostream>
using namespace std;

int main(){
int x = 0;
int X = 1;
cout << x << endl;
cout << X << endl;
return 0;
}

輸出結果:

image

註:endl 表示換行,但其實這跟 “\n” 有些許差別,問就是你自己看這篇:std::endl ?? - HackMD,不懂的話沒關係。

在上面的程式碼可以看到,小寫 x、大寫 X 的輸出結果是截然不同的。

另外有關於識別字要特別說明的地方,就是關鍵字這個東西。

關鍵字是什麼?用於特定語法上的關鍵字,像是 if、while 等等是關鍵字,舉 if 為例,if 是條件控制的語句,要是變數把這名稱佔走了,那不就用不了條件語句了?所以關鍵字「不得」作為識別字。

image

圖片取自:關鍵字 (C++) | Microsoft Learn

有關變數的小細節

像是 int x = 0; 的那個 “=”,大家可能會把它念成 x 等於 0,但這其實是錯的,在程式設計的世界當中,我們稱之為「指定」,我們會說 0 指定給變數 x。

總結

資料型態將資料分類分成很多類別,像是 int、char 等。

資料型態的用途在於程式在執行的時候,需要在記憶體空間當中運算並且儲存這些資訊,而每個資料型態都是不同的個體,每個資料型態的儲存容量也不太一樣,所以資料型態會有它的範圍所在。

變數宣告需遵守以下四步驟:

  1. 宣告資料型態。(如:int)
  2. 寫變數名稱
  3. 寫值
  4. 加上你的分號!!!!!

-> int x = 0;

識別字能夠作為個別名稱的規範,像是變數命名規則。

識別字有以下規則:

  1. 開頭必須以英文字母或底線開頭
  2. 不能用特殊字元當作識別字(!@#$%^&*())
  3. 不能用關鍵字當作識別字

等號 “=” 在變數上的說法,我們要說指定,將某值指定給變數。

參考資料

C++ 数据类型 | 菜鸟教程

資料類型範圍 | Microsoft Learn

內建類型 (C++) | Microsoft Learn

C++ 变量类型 | 菜鸟教程

關鍵字 (C++) | Microsoft Learn

https://openhome.cc/Gossip/CppGossip/DataType.html