基本資料型態

極為常見

什麼是資料型態

在前面的章節,變數裡面只有存放數字,那是因為前面定義變數的方法如下:

int score = 100;

而更仔細的說,定義變數的語法其實是長這樣:

資料型態 名稱 = 初始值;

那資料型態是指什麼呢?

資料型態是指變數裡面要儲存的資料是什麼 "類型" 的,比如 100、0、655 都屬於 "整數",所以要使用 "int" 這個型態來定義變數,而 "int" 其實就是 "integer"(整數)的簡寫。

常見基本資料型態

整數

int

int可以用來儲存整數,不過實際上 int 不能儲存所有的整數,只能儲存 -21474836482147483647 之間的整數,如果超過這個範圍,就會發生 overflow(溢位)的問題,導致數值錯誤。

補充

int 在不同的作業系統上可能會有不同的大小,但是通常都是 4 個位元組。

overflow 是指一個變數的值超過了它所能儲存的範圍,導致數值錯誤,之後會有專門的章節來介紹。

通常不用仔細的去記住 int 的範圍,只要知道它的範圍大約在 10910^9 左右就可以了。

int age = 18;

long long

儲存整數,但是跟 int 的差別就是它可以儲存更大的整數,具體的範圍是 -92233720368547758089223372036854775807,如果超過這個範圍,也會發生 overflow 的問題。

補充

long long 在不同的作業系統上可能會有不同的大小,但是通常都是 8 個位元組。

通常不用仔細的去記住 long long 的範圍,只要知道它的範圍大約在 101810^{18} 左右就可以了。

long long big_num = 10000000000;

unsigned int

unsigned int 也是用來儲存整數的,不過它只能儲存非負整數,也就是說它不能儲存負數,但是它的範圍比 int 大,可以儲存 04294967295 之間的整數。

補充

unsigned int 之所以可以多存一位且不能存負數的原因是,原本用來儲存正負號的位元被拿去多存一個位數。

unsigned int count = 100;

short

short 也是用來儲存整數的,不過它的範圍比 int 小,只能儲存 -3276832767 之間的整數。

short num = 10;

unsigned short

unsigned short 也是用來儲存整數的,不過它只能儲存非負整數,也就是說它不能儲存負數,但是它的範圍比 short 大,可以儲存 065535 之間的整數。

unsigned short num = 10;

unsigned long long

unsigned long long 也是用來儲存整數的,不過它只能儲存非負整數,也就是說它不能儲存負數,但是它的範圍比 long long 大,可以儲存 018446744073709551615 之間的整數。

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 是用來儲存「布林值」的資料型態,只有兩個值:truefalse,通常用來表示一個敘述的「成立」或「不成立」。

bool isPass = true;
bool isFail = false;
補充

如果嘗試把一個布林值 cout 出來,你會發現 true 會被輸出成 1,而 false 會被輸出成 0,這是因為 bool 在記憶體中其實是一個整數,true 代表 1,false 代表 0。

小測驗

下列哪個敘述是錯誤的?