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...