したがって、typedef:edされたプリミティブデータ型の理由は、低レベルの表現を抽象化し、理解しやすくするためです(型ではuint64_tなく、long long8バイトです)。
ただし、uint_fast32_tと同じtypedefものがありuint32_tます。「高速」バージョンを使用すると、プログラムが高速になりますか?
したがって、typedef:edされたプリミティブデータ型の理由は、低レベルの表現を抽象化し、理解しやすくするためです(型ではuint64_tなく、long long8バイトです)。
ただし、uint_fast32_tと同じtypedefものがありuint32_tます。「高速」バージョンを使用すると、プログラムが高速になりますか?
回答:
int一部のプラットフォームでは、16ビットと小さい場合があります。アプリケーションには十分でない場合があります。uint32_t存在することは保証されていません。typedef実装が正確に32ビットの符号なし整数型を持っている場合に限り、実装が提供する必要があるのはオプションです。たとえば、9ビットのバイトを持つものもあるので、はありませんuint32_t。uint_fast32_tあなたの意図を明確に述べています:それは少なくとも 32ビットのタイプであり、パフォーマンスの観点からは最高です。uint_fast32_t実際には64ビット長になることがあります。それは実装次第です。...
uint_fast32_tと同じtypedef があるものがありますuint32_t...
あなたが見ているものは標準ではありません。これは特定の実装です(BlackBerry)。したがって、そこからuint_fast32_t常にと同じであると推測することはできませんuint32_t。
以下も参照してください。
uint_least32_tもできます。これは、uint_fast32_t速度よりも小さなストアを優先することを除いて同じです。
違いは、正確さと可用性にあります。
ここのドキュメントは言う:
幅の符号なし整数型を正確に(それぞれ、8、16、32及び64ビットの実装が直接入力をサポートしている場合にのみ提供)。
uint8_t uint16_t uint32_t uint64_t
そして
幅の最も速い符号なし符号なし整数型少なくとも 8、16、32及び64ビットのそれぞれ
uint_fast8_t uint_fast16_t uint_fast32_t uint_fast64_t
そのため、正確にビットuint32_tを持つ型であるという違いはかなり明確であり、実装は、正確に 32ビットの型を持つ場合にのみ提供する必要があり、その型をとしてtypedefできます。つまり、利用できる場合とできない場合があります。 32uint32_tuint32_t。
一方、uint_fast32_t有するタイプである少なくとも実装がtypedefでよい場合も手段、32ビット、uint32_tのようuint_fast32_t ならば、それが提供しますuint32_t。それは提供していない場合uint32_t、その後uint_fast32_t少なくとも有する任意の型のtypedefであり得る32ビット。
uint32_t、すべてのシステムで正確に32ビットです(存在する場合)。これは、たとえば64ビットのシステムと比べて高速ではない可能性があります。 uint_fast32_t一方、少なくとも 32ビット、64ビットの場合もあります。
uint16_t x;、ARM7-TDMIの32ビットレジスタに格納されている場合、コードをx++;として評価する必要がありx=((x+1)<<16)>>16);ます。そのプラットフォームのコンパイラでは、それを回避するためにuint_fast16_tと同意語として定義される可能性が最も高いでしょうuint32_t。
[u]int_(fast|least)N_tオプションでもないのですか?確かに、64ビットのプリミティブ型をサポートするために、すべてのアーキテクチャが標準で必要なわけではありませんか?しかし、の表現はstdint.h、そうしなければならないことを意味しています。私が奇妙に思えるのは、64ビットコンピューティングが主流になる数年前の1999年以来、エンベデッドアーキテクチャの(多くの場合、現在も)最新の遅れは言うまでもありません。これは私にとって大きな見落としのようです。
あなたが #include inttypes.hあなたのプログラムの中で、あなたは整数を表現するためのさまざまな方法の束へのアクセスを取得します。
uint_fast * _t型は、特定のビット数を表すための最高速の型を単純に定義します。
このように考えてください。型の変数を定義し、shortそれをプログラムで数回使用します。ただし、作業中のシステムは、typeの値を使用するとより速く動作する可能性がありますint。変数をtypeとして定義することによりuint_fast*t、コンピューターは、処理できる最も効率的な表現を選択します。
これらの表現に違いがない場合、システムは必要な表現を選択し、一貫してそれを使用します。