參考文章
資料型別一覽表
算數型別(arithmetic type)
字元型別
signed char 有符號字元
unsigned char 無符號字元
char 字元(可以是 signed char 或 unsigned char,由實現定義)
// 除此之外,還定義了寬字元(c11):
1. wchar_t
2. char16_t
3. char32_t
整數型別
1. 短整形
short
signed short
short int
signed short int
// 等價於
short int
2. 無符號短整形
unsigned short
unsigned short int
// 等價於
unsigned short int
3. 整形
signed
int
signed int
// 等價於
int
4. 無符號整形
unsigned
unsigned int
// 等價於
unsigned int
5. 長整型
long
long int
signed long
signed long int
// 等價於
long int
6. 無符號長整型
unsigned long
unsigned long int
// 等價於
unsigned long int
7. long long int(c99,不懂該怎麼稱呼了…)
long long
long long int
signed long long
signed long long int
// 等價於
long long int
8. unsigned long long int(c99)
unsigned long long
unsigned long long int
// 等價於
unsigned long long int
資料模型
每種實現對資料型別的大小選擇統稱為 資料模型,以下四種是大家普遍接受的資料模型:
32 System
1. LP32 2/4/4,(int 16bit,long & pointer 32bit)
1. 僅出現在 win16 API 中
2. LP32 4/4/4,(int,long,pointer 32bit)
1. win32 API
2. 類 unix 系統(linux or mac)
64 System
3. LP64 4/4/8,(int & long 32big,pointer 64 bit)
4. LP64 4/8/8,(int 32 bit,long & pointer 64 bit)
其他模型非常罕見(幾乎可以不用理會,實際就是無需理會)!舉一個例子,資料模型 LP64 8/8/8(int & long & pointer 64 bit),這種資料模型只出現在早期的 unix 機器上
浮點型別
1. float 單精度浮點型 32bit(4byte)
2. double 雙精度浮點型 64bit(8byte)
3. long double 擴充套件精密浮點型(需要機器支援) >=64 bit
如果使用了 complex.h
,表示需要用到複雜的浮點數
以下寫法都是有效的:
float _complex float complex
double _complex double complex
long double _complex long double complex
float _imaginary float imaginary
double _imaginary double imaginary
long double _imaginary long double imaginary
原子型別(atomic type),限定符
支援以下三種寫法:
// p 是指向原子 const int 的指標
_Atomic const int * p1;
// 同上
const atomic_int * p2;
// 同上
const Atomic(int) * p3;
原子型別的物件是唯一不受資料競爭的物件,也就是說,它們可以由兩個執行緒併發地修改,或者由另一個執行緒修改。
擁有以下四個相關屬性:
1. 寫入一致性(write-write-coherence)
2. 讀取一致性(read-read-coherence)
3. 讀寫一致性(read-write-coherence)
4. 寫讀一致性(write-read-coherence)
具體解釋參考官方文件:atomic type
目前的 visual studio
中不支援該型別
由 typedef 引入的說明符
// 宣告 int_t 是 int 的別名
typedef int int_t
// 進階
// char_t 是 char 的別名
// chart_p 是 char* 的別名
// fp 是 char(*)(void) 的別名
typedef char char_t, *char_p, (*fp)(void)
修飾符
const
// 常量不可改動
const int a = 10;
volatile
// 提醒計算機:
// a 變數可能會實時更新,不能快取
// 這個一般多用在多執行緒場景下
volatile int a = 10;
restrict
特殊的常量
INFINITY 無窮
NaN 非數字
數值範圍
如果需要準確的瞭解到數值的範圍,請參閱(頁面底部):各種型別對應的數值範圍