C語言 32 64位機 資料型別字長

2021-07-11 00:05:05 字數 1566 閱讀 2305

32位平台:

char 1個位元組8位

short 2個位元組16位

int 4個位元組32位

long 4個位元組

long long 8個位元組

float 4個位元組

double 8個位元組

指標 4個位元組

有符號和無符號都一樣.

64位平台:

char 1個位元組

short 2個位元組

int 4個位元組

long 8個位元組(區別)

long long 8個位元組

float 4個位元組

double 8個位元組

指標 8個位元組(區別)

為了保證平台的通用性,程式中注意使用long資料庫型。可以使用固定大小的資料型別巨集定義,這些巨集定義需要引用stdint.h標頭檔案:

typedef signed char       int8_t

typedef short int int16_t;

typedef int int32_t;

# if __wordsize == 64

typedef long int int64_t;

# else

__extension__

typedef long long int int64_t;

#endif

它在不同的平台上編譯時長度不同,但都是標準的平台字長,比如64位機器它的長度就是8位元組,32位機器它的長度是4位元組,使用它可以安全地進行整數與指標的轉換運算,也就是說當需要將指標作為整數運算時,將它轉換成intptr_t進行運算才是安全的。intptr_t需要引用stddef.h標頭檔案,它的定義如下:

#if __wordsize == 64

typedef long

int intptr_t;

#else

typedef int intptr_t;

#endif

程式設計中要盡量使用sizeof來計算資料型別的大小

以上型別定義都有相應的無符號型別。

它們分別是unsigned和signed size of computer word size。它們也是表示計算機的字長,在32位機器上是int型,在64位機器上long型。使用它們對於增加平台的通用性有很大好處,從某種意義上來說它們等同於intptr_t和uintptr_t。使用它們也需要引用stddef.h標頭檔案

五、socket的accept函式在有些作業系統上使用size_t是不正確的,因為accept接收的int*型別,而size_t的長度可能會超過int*的長度限制,導致錯誤。後來bsd使用sock_t來替代它。

ps: 初學計算機,有任何不規範,不準確的細節,儘管提出!一起討論下.

32 64位作業系統資料型別位元組對比

int型字長問題 c c 規定int字長和機器字長相同 作業系統字長和機器字長未必一致 編譯器根據作業系統字長來定義int字長 由上面三點可知,在一些沒有作業系統的嵌入式計算機系統上,int的長度與處理器字長一致 有操作 系統時,作業系統的字長與處理器的字長不一定一致,此時編譯器根據作業系統的字長來...

java資料型別及其字長

資料型別 大小 範圍 預設值 byte 位元組 8 128 127 0 shot 短整型 16 32768 32768 0 int 整型 32 2147483648 2147483648 0 long 長整型 64 9233372036854477808 9233372036854477808 0 ...

32 64位作業系統,資料型別位元組數對比

常用資料型別對應位元組數 可用如sizeof char sizeof char 等得出 32位編譯器 char 1個位元組 char 即指標變數 4個位元組 32位的定址空間是2 32,即32個bit,也就是4個位元組。同理64位編譯器 short int 2個位元組 int 4個位元組 unsig...