64 位資料模型 c c

2021-08-30 22:58:24 字數 3494 閱讀 9244

出處:

**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,中文一般翻譯為 概念資料模型 概念資料模型是終端使用者對資料儲存的看法,反映了終端使用者綜合性的資訊需求,它以資料類的方式描述企業級的資料需求,資料類代表了在業務環境中自然聚集成的幾個主要類別資料。概念資料模型的內容包括重要的實體...