C C 中有關字長與平台無關的整數型別

2021-04-06 17:48:08 字數 2297 閱讀 4769

字長與平台無關的整型資料型別

在c/c++中,整型的長度跟編譯器相關,編譯器的實現取決於cpu。 比如tc++是dos16下的應用程式,dos16是16位的作業系統,所以tc++中sizeof(int)==16;同理win32中sizeof(int)==32。

c99標準定義乙個叫著的標頭檔案,該標頭檔案定義了一系列各種類別的整數型別typedef名字。儘管速多c++工具支援該標頭檔案已經有一段時間了,但它尚未正式收錄於c++標準,因此,在使用該標頭檔案之前,你應該先閱讀你的編譯器文件,看看它是否支援該檔案。在某些c++的編譯器中,如gnc,為了能使用c99標準的這些新特性,就在標頭檔案中引入了這個檔案.

字長固定的整型型別

c99標準在這個標頭檔案的型別定義中,有一套是字長固定的整型型別:

int8_t     int16_t     int32_t     int64_t

與其對應的字長固定的無符號型整型型別有:

uint8_t    uint16_t    uint32_t    uint64_t

它們的名字非常直觀。例如,int8_t是長度固定為8位元的有符號整型型別,而uint8_t則是字長固定為8位元的無符號型整型型別。當你需要確保在不同的平台上,整型資料的字長固定不變,那麼你就可以使用這些typedef名字。允許對期望的性質進行更為詳細的描述。例如,有的型別的名字是 int_least8_t,它至少有 8 位,還有 int32_t,它恰好是 32 位。

c99標準標準保證至少可以訪問 8 位、16 位、32 位和 64 位型別。沒***會提供精確寬度型別。不要使用這種型別,除非您肯定是實在不能接受更大的型別。另乙個可選的型別是新的 intptr_t 型別,它是乙個足夠大的可以容納乙個指標的整數。並不是所有的系統都提供這樣一種型別(儘管當前所有的 linux 和 bsd 實現都提供)。

字長最小的快速整型型別

該標頭檔案還定義了另外一套typedef名字,即「最小指定長度的快速整數型別」。這套typedef名字中的每一種都表示一種整數型別,它滿足在長度不小於某個指定長度的前提下,擁有最快的處理速度。這些整數型別的名字為int_fastx_t(有符號)或者uint_fastx_t(無符號),其中「x」表示最小指定長度。例如,int_fast32_t指得是字長至少為32位元的快速有符號整型型別。最小字長快速整型型別有:

int_fast8_t  int_fast16_t  int_fast32_t  int_fast64_t

對應的無符號整型型別有:

uint_fast8_t  uint_fast16_t  uint_fast32_t  uint_fast64_t

什麼情況下使用這些typedef名字?

假設你需要乙個字長不少於16位元的迴圈計數器,那麼你會希望該計數器的型別總是當前計算機cpu最佳操作的整型型別,而int_fast16_t可以保證任何平台上的編譯器總是選擇字長不少於16位元的最快整型型別。

#include

for (int_fast16_t n=0; n<30000; ++n)

關於整型引數移植

假如你需要確定容量的整型,那麼你應該使用stdint.h或者inttypes.h中定義的型別.

這些標頭檔案中定義了以下的整數型別:

int8_t;

uint8_t;

int16_t;

uint16_t;

int32_t;

uint32_t;

int64_t;

uint64_t;

int_least8_t;

uint_least8_t;

int_least16_t;

uint_least16_t;

int_least32_t;

uint_least32_t;

int_least64_t;

uint_least64_t;

int_fast8_t;

uint_fast8_t;

int_fast16_t;

uint_fast16_t;

int_fast32_t;

uint_fast32_t;

int_fast64_t;

uint_fast64_t;

intptr_t;

uintptr_t;

intmax_t;

uintmax_t;

如果是boost庫的使用者則比較幸運,因為在boost庫中,這個標頭檔案封裝了c99標準中的整數型別.

參考文章:

2.danny kalev的文章:

C C 中有關字長與平台無關的整數型別

c c 中,整型的長度跟編譯器相關,編譯器的實現取決於cpu。比如tc 是dos16下的應用程式,dos16是16位的作業系統,所以tc 中sizeof int 16 同理win32中sizeof int 32。c99標準定義乙個叫著的標頭檔案,該標頭檔案定義了一系列各種類別的整數型別typedef...

C C 中有關字長與平台無關的整數型別

from 在c c 中,整型的長度跟編譯器相關,編譯器的實現取決於cpu.比如tc 是dos16下的應用程式,dos16是16位的作業系統,所以tc 中sizeof int 16 同理win32中sizeof int 32.c99標準定義乙個叫著的標頭檔案,該標頭檔案定義了一系列各種類別的整數型別t...

字長與平台無關的整型資料型別

平台無關性 與平台無關的特性使程式可以方便地被移植到網路上的不同機器 不同平台 c99標準定義乙個叫著的標頭檔案,該標頭檔案定義了一系列各種類別的整數型別typedef名字。儘管速多c 工具支援該標頭檔案已經有一段時間了,但它尚未正式收錄於c 標準,因此,在使用該標頭檔案之前,你應該先閱讀你的編譯器...