原文閱讀
基本資料型別是所有程式語言的第一門課,必須要好好學習掌握,要非常熟悉每種型別的用途、範圍大小、所佔記憶體。
位(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...