したがって、typedef
:edされたプリミティブデータ型の理由は、低レベルの表現を抽象化し、理解しやすくするためです(型ではuint64_t
なく、long long
8バイトです)。
ただし、uint_fast32_t
と同じtypedef
ものがありuint32_t
ます。「高速」バージョンを使用すると、プログラムが高速になりますか?
したがって、typedef
:edされたプリミティブデータ型の理由は、低レベルの表現を抽象化し、理解しやすくするためです(型ではuint64_t
なく、long long
8バイトです)。
ただし、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できます。つまり、利用できる場合とできない場合があります。 32
uint32_t
uint32_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
、コンピューターは、処理できる最も効率的な表現を選択します。
これらの表現に違いがない場合、システムは必要な表現を選択し、一貫してそれを使用します。