C/C++中有關字長與平台無關的整數類型

來源:互聯網
上載者:User

      在C/C++中,整型的長度跟編譯器相關,編譯器的實現取決於CPU。比如TC++是DOS16下的應用程式,DOS16是16位的作業系統,所以TC++中sizeof(int)==16;同理win32中sizeof(int)==32。
  C99標準定義一個叫著<stdint.h>的標頭檔,該標頭檔定義了一系列各種類別的整數類型typedef名字。儘管速多C++工具支援該標頭檔已經有一段時間了,但它尚未正式收錄於C++標準,因此,在使用該標頭檔之前,你應該先閱讀你的編譯器文檔,看看它是否支援該檔案。在某些C++的編譯器中,如GNC,為了能使用C99標準的這些新特性,就在<inttypes.h>標頭檔中引入了這個檔案<stdint.h>.
  字長固定的整數型別
  C99標準在<stdint.h>這個標頭檔的類型定義中,有一套是字長固定的整數型別:
  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 <inttypes.h>    for (int_fast16_t n=0; n<30000; ++n)    {    //.. do something    }

  關於整型參數移植
  假如你需要確定容量的整型,那麼你應該使用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庫中,<cstdint.hpp>這個標頭檔封裝了C99標準<stdint.h>中的整數類型.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.