拡張整数型 (C/C++ での正しい整数サイズの選択)

C/C++ では、基本的な整数データ型 (char short int long および long long) に関する定義が非常に緩やかです。この言語では、少なくともある範囲の値を表現できることが保証されていますが、特定のプラットフォーム (コンパイラー オペレーティング システム ハードウェア) ではそれよりも大きい可能性があります。
良い例は長いです。あるマシンでは、32 ビット (C で必要な最小値) になる場合があります。別のものでは64ビットです。正確に 32 ビット長の整数型が必要な場合はどうすればよいでしょうか?ここで int32_t が登場します。これは、特定のシステムが持つ正確に 32 ビットの整数型のエイリアスです。
テンプレート: 
 

  intN_t or uintN_t   Where N is width of integer which can be 8 16 32 64 or any other type width supported by the library. 


 

CPP
   // C++ program to show use of extended integral types   #include      using     namespace     std  ;   int     main  ()   {      uint8_t     i  ;     // i with width of exact 8 bits      // Minimum value represented by unsigned 8 bit is 0      i     =     0  ;      cout     &  lt  ;  &  lt  ;     &  quot  ;  Minimum     value     of     i    t  :     &  quot  ;  &  lt  ;  &  lt  ;     (  int  )  i     &  lt  ;  &  lt  ;     endl  ;      // Maximum value represented by unsigned 8 bit is 255      i     =     255  ;      cout     &  lt  ;  &  lt  ;     &  quot  ;  Maximum     value     of     i    t  :     &  quot  ;  &  lt  ;  &  lt  ;     (  int  )  i     &  lt  ;  &  lt  ;     endl  ;      // Warning: large integer implicitly truncated to      // unsigned type. It will print any garbage value      i     =     2436  ;      cout     &  lt  ;  &  lt  ;     &  quot  ;  Beyond     range     value     of     i    t  :     &  quot  ;     &  lt  ;  &  lt  ;     (  int  )  i     &  lt  ;  &  lt  ;     endl  ;      return     0  ;   }   

出力: 
 

 In function 'int main()': 19:7:   warning  : large integer implicitly truncated to unsigned type [-overflow] i = 2436; ^ Minimum value of i : 0 Maximum value of i : 255 Beyond range value of i : 132 


さまざまなバリエーション  
1. 固定幅の符号なし 8 ビット整数: uint8_t  
つまり、ちょうど 8 ビットの unsigned int を与えてください。
2. 符号なし 8 ビット整数の最小幅: uint_least8_t  
これは、少なくとも 8 ビットを持つ最小の型の unsigned int を教えてくださいという意味です。メモリ消費量を最適化。
3. 最速の最小幅の符号なし 8 ビット整数: uint_fast8_t  
これは、プログラムを高速化するために、少なくとも 8 ビットの unsigned int を提供することを意味します。アライメントを考慮して、より大きなデータ型が選択される場合があります。速度を重視して最適化されています。
したがって、uint8_t は正確に 8 ビット幅であることが保証されます。 uint_least8_t は、少なくとも 8 ビット幅であることが保証されている最小の整数です。 uint_fast8_t は、少なくとも 8 ビット幅であることが保証されている最速の整数です。 
したがって、拡張整数型は記述に役立ちます ポータブル そして 効率的 コード。