資料型態類型
宣告變數
變數的定義為在程式中可被初始化(initial)及指派(assign)的動態資料,執行時期可根據流程改變其內容。
在 C 語言中宣告變數的模式如下範例
{資料型態} {變數名稱} = {初始化的值}; // 宣告一個具有初始化值的資料,其初始化的值必須符合其資料型態
{資料型態} {變數名稱}; // 宣告一個未具有初始化值的資料
已被宣告的變數,則可以指派符合其資料型態的資料。
{資料型態} {變數名稱} // 宣告變數
{變數名稱} = {符合其資料型態的值}; // 指派資料
基本類型
char
char
為 character 的縮寫,代表用來儲存一個「字元」。
char
可以用在儲存下列舉出的可顯示字元
# 26 個大寫的拉丁英文字母
A B C D E F G H I J K L M
N O P Q R S T U V W X Y Z
# 26 個小寫的拉丁英文字母
a b c d e f g h i j k l m
n o p q r s t u v w x y z
# 10 個十進位數字
0 1 2 3 4 5 6 7 8 9
# 29 個標點符號
! " # % & ' ( ) * + , - . / :
; < = > ? [ \ ] ^ _ { | } ~
在程式中使用 char
類型範例如下
int main()
{
char alpha = 'A'; // 宣告一個資料型態為 char,變數名稱為 alpha,初始化資料為 'A' 的變數
alpha = 'B'; // 指派資料 'B' 給變數 alpha
}
注意:在 C 語言中,
char
並不支援中文字元或其它不存在於上述可顯示字元的其它語系字元,在程式中字元變數不應該使用中文內容的資料。
字元僅能支援「單一字元」,若資料內容為 'AB'
則標準無法保證在不同情境下都有相同行為。
此警告情況也會出現在資料內容為中文字元時。
// 錯誤示範
// warning: multi-character character constant
// warning: overflow in implicit constant conversion
int main()
{
char multiChar = 'AB';
char chineseChar = '安';
}
有號(signed)整數類型
所謂的「有號」指的是可表達負數的整數類型。
標準有號整數如下所示:signed char
、 short
、int
、long
及 long long
。
在程式中使用 int
類型範例如下
int main()
{
int number = 40; // 宣告一個資料型態為 int,變數名稱為 number,初始化資料為 40 的變數
}
所佔記憶體空間大小
類型 | 等價類型 | 所佔記憶體大小 |
---|---|---|
short |
short int |
至少 2 bytes,通常 2 bytes |
short int |
short int |
至少 2 bytes,通常 2 bytes |
signed short |
short int |
至少 2 bytes,通常 2 bytes |
signed short int |
short int |
至少 2 bytes,通常 2 bytes |
int |
int |
至少 2 bytes,通常 4 bytes |
signed |
int |
至少 2 bytes,通常 4 bytes |
signed int |
int |
至少 2 bytes,通常 4 bytes |
long |
long int |
至少 4 bytes,通常 4 bytes。在 64 位元的 Unix/Unix-Like 上為 8 bytes |
long int |
long int |
至少 4 bytes,通常 4 bytes。在 64 位元的 Unix/Unix-Like 上為 8 bytes |
signed long |
long int |
至少 4 bytes,通常 4 bytes。在 64 位元的 Unix/Unix-Like 上為 8 bytes |
signed long int |
long int |
至少 4 bytes,通常 4 bytes。在 64 位元的 Unix/Unix-Like 上為 8 bytes |
long long |
long long int |
至少 8 bytes,通常 8 bytes |
long long int |
long long int |
至少 8 bytes,通常 8 bytes |
signed long long |
long long int |
至少 8 bytes,通常 8 bytes |
signed long long int |
long long int |
至少 8 bytes,通常 8 bytes |
無號(unsigned)整數類型
與有號整數相反,無號整數是指不帶負號的整數。
註:0 是無號整數。
標準的無號整數如下所示:_Bool
、unsigned char
、unsigned short
、unsigned int
、unsigned long
、unsinged long long
在程式中使用 unsigned int
類型範例如下
int main()
{
unsigned int value = 105; // 宣告一個資料型態為 unsigned int,變數名稱為 value,初始化值為 105 的變數
}
使用 _Bool
資料型態
int main()
{
_Bool sunny = 0; // 宣告一個資料型態為 _Bool,變數名稱為 sunny,初始化資料為 0 的變數
_Bool raining = 1; // 宣告一個資料型態為 _Bool,變數名稱為 raining,要初始化資料為 1 的變數
}
為了更方便利用 _Bool
這個資料型態,我們可以引入 stdbool.h
這個標頭檔。
以下程式範例與上一個程式範例結果相同
#include <stdbool.h>
int main()
{
bool sunny = false;
bool raining = true;
}
通常,整數 0
代表「否定」;整數 1
代表「肯定」,利用 stdbool.h
中的擴展,可以更清楚表達程式碼的意義。
浮點類型
浮點類型分為三種:實數浮點、複數浮點、虛數浮點。為簡化學習複雜度,此處僅探討實數浮點(以下簡稱浮點數)。
浮點數的定義為「帶有小數或指數的數值」,浮點數可根據小數的支援數量分為單精度浮點數 float
、倍精度浮點數 double
、長倍精度浮點數 long double
。
浮點數並無 unsigned
,因為在 IEEE 754 的定義中,浮點數都會具備符號位(sign bit)。
浮點數使用範例如下
int main()
{
float zero = 0.0;
float negativeZero = -0.0;
double large = 2e10; // 2e10 代表 2*10^10
}
小知識:浮點數中的
0.0
與-0.0
在數值上是相等,但在記憶體中儲存的資料是不同的。