出處:
**int型別比較特殊,具體的位元組數同機器字長和編譯器有關。如果要保證移植性,盡量用__int16 __int32 __int64吧,或者自己typedef int int32一下。
c、c++標準中只規定了某種型別的最小位元組數(防止溢位)
以高階語言編寫的應用軟體,從 32 位架構轉換到 64 位架構的各種困難。乙個共同的問題是,部分程式設計師假定指標如同其它資料型態一樣有相同的長度。程式設計師假定他們可以在資料型態之間傳送數量而不遺失資訊。這些假定只在一部分 32 位機器上如此(甚至是一部分 16 位機器),不過在 64 位機器上就不再如此。c 語言及其後代 c++ 尤其容易產生這種錯誤。
c 和 c++ 並未定義指標、整數型(int)、長型(long)為特定的位數目。
在主要的 32 位機器程式設計環境中,指標、「int」變數、「long」變數全部都是 32 位長。
在 64 位機器下的許多程式設計環境,「int」變數仍然是 32 位寬,不過「long」和指標是 64 位寬,上述內容稱為 lp64 資料模型。另乙個選擇是 ilp64 資料模型,三種資料型態都是 64 位寬,甚至 silp64 連「short」變數也是 64 位寬。然而,大多數情況下所需的修改是相對次要且簡單,而且許多編寫良好的程式可以簡單的重新編譯給新的環境,而無須修改。另乙個選擇是 llp64 模型,其維持 32 位**的相容性,使 int 和 long 為 32 位。「ll」指「long long」型態,其在所有平台下至少是 64 位,包括 32 位環境。
今天有許多 64 位編譯器使用 lp64 模型(包括 solaris、aix、hp、linux、mac os x、ibm z/os 本地編譯器)。微軟的 vc++ 編譯器使用 llp64 模型。其缺點是在 lp64 模型中將 long 存放到 int 可能會溢位。另一方面,還會使強制轉型乙個指標為 long 可以作用;在 llp 模型下,情況則剛好相反。兩者皆不應該出現在合乎 c99 的**中。
注意,程式設計模型是在預編譯器底層選擇的,且數個模型可共存於同一作業系統。然而一般由 os api 選擇程式設計模型作為原始模型。
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
型別識別符號
型別說明
長度(位元組)
範圍備註
char字元型
1-128 ~ 127
-27 ~ (27 -1)
unsigned char無符字元型
10 ~ 255
0 ~ (28 -1)
short int短整型
2-32768 ~ 32767
2-15 ~ (215 - 1)
unsigned short int無符短整型
20 ~ 65535
0 ~ (216 - 1)
int整型
4-2147483648 ~ 2147483647
-231 ~ (231 - 1)
unsigned int無符整型
40 ~ 4294967295
0 ~ (232-1)
float實型(單精度)
41.18*10-38 ~ 3.40*1038
7位有效位
double實型(雙精度)
82.23*10-308 ~ 1.79*10308
15位有效位
long double實型(長雙精度)
103.37*10-4932 ~ 1.18*104932
19位有效位
關於32位 64位機器資料模型的記錄
關於32位,64位機器資料模型的記錄。lp64 ilp64 llp64 ilp32 lp32為幾種不同的資料模式,除了llp64代表long long 和 pointer外,其餘的資料模式中的 i p l 分別代表int pointer long。資料模型中char short long long所...
概念資料模型 邏輯資料模型 物理資料模型
概念資料模型設計與邏輯資料模型設計 物理資料模型設計是資料庫及資料倉儲模型設計的三個主要步驟。在資料倉儲領域有乙個概念叫conceptual data model,中文一般翻譯為 概念資料模型 概念資料模型是終端使用者對資料儲存的看法,反映了終端使用者綜合性的資訊需求,它以資料類的方式描述企業級的資...
概念資料模型,邏輯資料模型,物理資料模型
在資料倉儲領域有乙個概念叫conceptual data model,中文一般翻譯為 概念資料模型 概念資料模型是終端使用者對資料儲存的看法,反映了終端使用者綜合性的資訊需求,它以資料類的方式描述企業級的資料需求,資料類代表了在業務環境中自然聚集成的幾個主要類別資料。概念資料模型的內容包括重要的實體...