C C 1 基本資料型別

2021-10-11 11:10:28 字數 4812 閱讀 5529

原文閱讀

基本資料型別是所有程式語言的第一門課,必須要好好學習掌握,要非常熟悉每種型別的用途、範圍大小、所佔記憶體。

位(bit)是最小儲存單元,可以儲存0或1

位元組(byte)是常用的計算機儲存單位。幾乎對所有機器,1位元組均為8位。

字(word)是設計計算機時給定的自然儲存單位,對於8位的微型計算機,1個字長只有8位。從那以後,個人計算機字增長至16位、32位直到目前的64位。計算機的字長越大,其資料轉移越快,允許的記憶體訪問也更多。

int型別比較特殊,具體的位元組數同機器字長和編譯器有關。如果要保證移植性,盡量用__int16 __int32 __int64吧

__int16、__int32這種資料型別在所有平台下都分配相同的位元組。所以在移植上不存在問題。

所謂的不可移植是指:在乙個平台上編寫的**無法拿到另乙個平台上執行時,不能達到期望的執行結果。

例如:在32為平台上(所謂32位平台是指通用暫存器的資料寬度是32)編寫**,int 型別分配4個位元組,而在16位平台是則分配2個位元組,那麼在16位上編譯出來的exe,

其中是為int分配2位元組,而在32位平台上執行時,會按照4個位元組來解析,顯然會出錯誤的!!

而對於非int行,目前為止,所有的型別分配的位元組數都是相容的,即不同平台對於同乙個型別分配相同的位元組數!!

建議:在**中盡量避免使用int型別,根據不同的需要可以用short,long,unsigned int 等代替。

下面是各個型別一覽表***

64位指的是cpu通用暫存器的資料寬度是64位的。

資料型別名稱

位元組別名

取值範圍

int*

signed,signed int

由作業系統決定,即與作業系統的 「字長」 有關

unsigned int

*unsigned

由作業系統決定,即與作業系統的 「字長」 有關

__int8

1char,signed char

–128 到 127

__int16

2short,short int,signed short int

–32,768 到 32,767

__int32

4signed,signed int

–2,147,483,648 到 2,147,483,647

__int648無

–9,223,372,036,854,775,808 到 9,223,372,036,854,775,807

bool1無

false 或 true

char

1signed char

–128 到 127

unsigned char1無

0 到 255

short

2short int,signed short int

–32,768 到 32,767

unsigned short

2unsigned short int

0 到 65,535

long

4long int,signed long int

–2,147,483,648 到 2,147,483,647

long long

8none (but equivalent to __int64)

–9,223,372,036,854,775,808 到 9,223,372,036,854,775,807

unsigned long

4unsigned long int

0 到 4,294,967,295

enum*無

由作業系統決定,即與作業系統的 「字長」 有關

float4無

3.4e +/- 38 (7 digits)

double8無

1.7e +/- 308 (15 digits)

long double8無

1.7e +/- 308 (15 digits)

wchar_t

2__wchar_t

0 到 65,535

一些與平台無關的整型

資料型別

別名符號

位元組最小值

最大值int8_t

signed char

signed

1-128

127uint8_t

unsigned char

unsigned10

255int16_t

short

signed

2-32,768

32,767

uint16_t

unsigned short

unsigned20

65,535

int32_t

intsigne

4-2,147,483,648

2,147,483,647

uint32_t

unsigned int

unsigned40

4,294,967,295

int64_t

long long

signed

8-9,223,372,036,854,775,808

9,223,372,036,854,775,807

uint64_t

unsigned long long

unsigned80

18,446,744,073,709,551,615

上面是一些與平台無關的資料型別,由於在32位機器和64位機器中,long佔據不同的位元組數,所以推薦使用上面的類。

在32位編譯器中,int和long都是佔4個位元組。

一般來說,signed 和 unsigned 可看作是修飾 short 和 int 這些型別名詞的形容詞,不過單獨使用 signed 和 unsigned 時,預設了它們的中心詞是 int。

命名規則

short 至少 16位;

int 至少與 short 一樣長;

long 至少 32位,且至少與 int 一樣長;

long long 至少 64位,且至少與 long 一樣長。

int test =20;

// 不推薦

int test1;

test1 =

30;

注意:如果不對函式內部定義的變數賦值,該變數的值將是不確定的。這意味著該變數的值將是在它建立之前,相應記憶體單元儲存的值。

c++ 11 的初始化方式

大括號初始化(一致性初始化),是非窄化初始化。

int emus

;int rheas =

;int rocs =

;int psychics

;

int i1 =

3.14

// 編譯器執行了窄化操作(風險)

int i1n =

// 窄化錯誤,小數部分丟失

float f1 =

// 正確

注意:unsigned 本身就是 unsigned int 的縮寫。

預設儲存為 int 型,u 或 u 表示 unsigned int,long 字尾 l 或 l,unsigned 就 ul 或 ul。

依此類推,ll、ull

字面值,用單引號括起來的單字元。

char 預設既不是有符號也不是無符號,是否有符號有c++ 實現決定,這樣是為了靈活與硬體屬性匹配。

signed char 0 ~ 255

unsigned char -128 ~ 127

儲存標準 ascii 字元有無符號都行。

wchat_t 寬字元型別,用於處理用乙個8位位元組無法表示的字元,如日文漢字系統。是一種整型,與另一種整型(底層(underlying)型別)的長度和符號屬性相同。與底層實現相關。

c++ 11 新增:char16_t 和 char32_t

都是無符號char 乙個佔16位(utf-16),乙個佔32位(utf-32),字首 u 和 u 表示。此型別的出現與 unicode有關,wchat_t 不夠用,如字串編碼、表情符等。

原則上只需占用1位

提公升到 int 1=true、0=false,此外任何數字或指標都可以隱式轉換為 bool 任何非零的為 true,零為 false。

c 和 c++ 規定,float 至少 32位,double 至少48位,且不少於 float,long double 至少和 double 一樣多。

通常 float 32位,double 64位,long double 80、96或128位。另外這三種的指數範圍至少是 -37到37。

表示常量,c 中會用 #define 定義符號常量,c++ 中請使用 const。

編譯器會自動推斷型別。

auto m 

// int

auto n

// long

auto i

// unsigned long

auto pi

// double

如果編譯器不是最新的,不推薦使用 auto。

C C 基本資料型別

學了c然後c 然後mfc windows,然後是c 其中資料型別很多,由基本型別衍生的typedef型別也n多。熟知基本資料型別是我們正確表達實際問題中各種資料的前提,因此我分類總結了一下c c windows c 基本資料型別,以便日後查閱。ansi c c 基本資料型別 說明 1 型別修飾符si...

C C 基本資料型別

學了c然後 c 然後 mfc windows,然後是c 其中資料型別很多,由基本型別衍生的 typedef 型別也n 多。熟知基本資料型別是我們正確表達實際問題中各種資料的前提,因此我分類總結了一下 c c windows c 基本資料型別,以便日後查閱。ansi c c 基本資料型別 type s...

c c 基本資料型別

整型 浮點型 int main 執行結果 size char 1 short int 2 int 4 long 4 long long int 8 int long long 8 long long 8 三種寫法相同 float 4 double 8型別 大小 byte char 1short 2i...