1. ホーム
  2. c++

[解決済み] uint8_t, uint_fast8_t, uint_least8_tの違いについて

2023-04-14 22:50:01

疑問点

C99標準では、以下のデータ型が導入されています。ドキュメントは はこちら AVR stdint ライブラリのドキュメントを参照してください。

  • uint8_t は8ビットの符号なし型であることを意味します。
  • uint_fast8_t は、少なくとも 8 ビットの最速の符号なし int であることを意味します。 ビットを持つ最速の符号なし整数であることを意味します。
  • uint_least8_t は、少なくとも8ビットの符号なしintであることを意味します。

私は理解しました uint8_t とは何ですか? uint_fast8_t (がどのようにレジスタレベルで実装されているかは知りません)。

1.quot;の意味を説明してください。 unsigned int で、少なくとも8ビットのものです。

2.どのように uint_fast8_tuint_least8_t に比べて、効率/コードスペースを向上させることができます。 uint8_t ?

どのように解決するのですか?

uint_least8_t は、少なくとも8ビットを持つ最小の型です。 uint_fast8_t は、少なくとも 8 ビットを持つ最も高速な型です。

エキゾチックなアーキテクチャを想像することで、その違いを知ることができます。20 ビットのアーキテクチャを想像してみてください。その unsigned int は 20 ビット(1 つのレジスタ)であり、その unsigned char は10ビットです。ですから sizeof(int) == 2 を使っても char を使うと、レジスタを半分にするために余分な命令が必要になります。そこで

  • uint8_t : は未定義(8ビットタイプなし)です。
  • uint_least8_t : は unsigned char であり、少なくとも 8 ビットである最小の型です。
  • uint_fast8_tunsigned int というのは、私の想像するアーキテクチャでは、ハーフレジスタの変数はフルレジスタのものよりも遅いからです。