什麼是資料型態#
在前面的章節,變數裡面只有存放數字,那是因為前面定義變數的方法如下:
int score = 100;
而更仔細的說,定義變數的語法其實是長這樣:
資料型態 名稱 = 初始值;
那資料型態是指什麼呢?
資料型態是指變數裡面要儲存的資料是什麼 “類型” 的,比如 100、0、655 都屬於 “整數”,所以要使用 “int” 這個型態來定義變數,而 “int” 其實就是 “integer”(整數)的簡寫。
常見基本資料型態#
整數#
int#
int可以用來儲存整數,不過實際上 int 不能儲存所有的整數,只能儲存 -2147483648 到 2147483647 之間的整數,如果超過這個範圍,就會發生 overflow(溢位)的問題,導致數值錯誤。
補充int 在不同的作業系統上可能會有不同的大小,但是通常都是 4 個位元組。
overflow 是指一個變數的值超過了它所能儲存的範圍,導致數值錯誤,之後會有專門的章節來介紹。
通常不用仔細的去記住 int 的範圍,只要知道它的範圍大約在 \(10^9\) 左右就可以了。
int age = 18;
long long#
儲存整數,但是跟 int 的差別就是它可以儲存更大的整數,具體的範圍是 -9223372036854775808 到 9223372036854775807,如果超過這個範圍,也會發生 overflow 的問題。
補充
long long 在不同的作業系統上可能會有不同的大小,但是通常都是 8 個位元組。
通常不用仔細的去記住 long long 的範圍,只要知道它的範圍大約在 \(10^{18}\) 左右就可以了。
long long big_num = 10000000000;
unsigned int#
unsigned int 也是用來儲存整數的,不過它只能儲存非負整數,也就是說它不能儲存負數,但是它的範圍比 int 大,可以儲存 0 到 4294967295 之間的整數。
補充
unsigned int 之所以可以多存一位且不能存負數的原因是,原本用來儲存正負號的位元被拿去多存一個位數。
unsigned int count = 100;
short#
short 也是用來儲存整數的,不過它的範圍比 int 小,只能儲存 -32768 到 32767 之間的整數。
short num = 10;
unsigned short#
unsigned short 也是用來儲存整數的,不過它只能儲存非負整數,也就是說它不能儲存負數,但是它的範圍比 short 大,可以儲存 0 到 65535 之間的整數。
unsigned short num = 10;
unsigned long long#
unsigned long long 也是用來儲存整數的,不過它只能儲存非負整數,也就是說它不能儲存負數,但是它的範圍比 long long 大,可以儲存 0 到 18446744073709551615 之間的整數。
unsigned long long num = 10000000000;
字元與字串#
char#
char 其實就是 “character”(字元)的簡寫,它可以儲存單一個字元,比如 ‘a’、‘b’、‘c’ 等等,在語法上要用單引號 ' 包住來表示。
補充
char 在記憶體中其實是一個整數(ASCII 編碼),只是在輸出時會轉換成對應的字元。
char ch = 'a';
string#
string 是一個 “字串” 的資料型態,可以用來儲存一串文字,比如 “Hello”、“C++” 等等。這邊只是簡單介紹,在之後的章節會有專門的章節來介紹 string 的更多用法。
string name = "Alice";
浮點數#
float#
float 也是用來儲存數字的,不過它儲存的是浮點數(也就是有小數點的數字),但一般來說都強烈建議不要在 APCS 檢定中使用 float,而是使用接下來要介紹的 double 代替,因為 float 的精度非常低,一不小心就很容易出錯。
float pi = 3.14;
double#
double 也是用來儲存浮點數的資料型態,不過跟 float 的差別就是 double 的精度更高,但即便如此還是多少會有誤差,因此不建議濫用 double, 如果有可以避免使用 double 的方法則盡量不要使用 double。關於浮點數運算及精度問題,我們會在之後的章節詳細介紹。
double pi = 3.14159265;
long double#
long double 是用來儲存浮點數的資料型態,跟 double 的差別就是 long double 的精度更高,有時候如果覺得程式沒錯但是答案卻不對,可以試著用 long double 替換 double 來儲存浮點數試試看。但也請不要濫用,畢竟精度愈高,記憶體和運算時間也會愈高。
long double pi = 3.14159265358979;
其他#
bool#
bool 是用來儲存「布林值」的資料型態,只有兩個值:true 和 false,通常用來表示一個敘述的「成立」或「不成立」。
bool isPass = true;
bool isFail = false;
補充
如果嘗試把一個布林值 cout 出來,你會發現 true 會被輸出成 1,而 false 會被輸出成 0,這是因為 bool 在記憶體中其實是一個整數,true 代表 1,false 代表 0。
