21

I saw different types of definition of an integer in stdint.h. I'll take unsigned 32-bit integer as an example.

  1. uint32_t means clearly an unsigned integer of 32 bits. That's the one I always use.

  2. uint_fast32_t and uint_least32_t : What's the difference with uint32_t and when should I use them instead of uint32_t ?

And now, I saw uintX_t where X is 24, 40, 48 and 56. It happens in my code that I have to work with 48 and 56-bit integers. As an example, I suppose uint24_t is define as something like this :

struct uint24_t { unsigned int the_integer : 24; };

Am I right ? And, Will you suggest me to use uint48_t for my 48-bit unsigned integers or should I use the normal uint64_t ?

Thanks for your explanations.

4

2 に答える 2

25

uint32_t との違いは何ですか

uint_fast32_t少なくとも 32 ビットの符号なし型であり、(何らかの一般的な方法で) そのような型の中で最も高速です。「高速」とは、選択肢が与えられた場合、実装者はおそらく、アーキテクチャが演算、ロード、およびストア命令を持つサイズを選択することを意味します。特定のベンチマークの勝者ではありません。

uint_least32_t少なくとも 32 ビットの最小の符号なし型です。

uint32_tそのようなタイプが存在する場合、パディングなしの正確に 32 ビットのタイプです。

私は正しいですか?

いいえ。uint24_t存在する場合、それは整数型であり、 ではありませんstruct。この実装に 24 ビットの符号なし整数型がない場合、それは存在しません。

unsigned longは少なくとも 32 ビットである必要があるため、エイリアスになる可能性のある唯一の標準型はuint24_tcharunsigned charおよびunsigned shortですunsigned int。または、拡張型 (つまり、標準で定義されている整数型のいずれでもない、実装によって提供される整数型) にすることもできます。

48 ビットの符号なし整数に uint48_t を使用するよう提案してくれませんか?

それが存在し、必要なサイズである場合は、それを使用することもできます。ただし、非常に多くの実装には存在しないため、移植性のないコードでの使用にのみ適しています。正確な 48 ビット整数を扱わなければならない理由がプラットフォーム固有であれば、それで問題ありません。

正確な 16、32、および 64 ビットの型も技術的にはオプションですが、実装に適切な整数型がある場合は存在する必要があります。「適切」とは、パディング ビットのない正確な N ビットの符号なし型があることだけでなく、対応する符号付き型にパディング ビットがなく、2 の補数表現を使用することも意味します。実際には、これはあらゆる場所に非常に近いため、それらのいずれかを使用しても移植性はほとんど制限されません。ただし、移植性を最大限に高めるには、uint_least32_tまたはuint_fast32_tを優先して使用する必要がありますuint32_t。どちらが重要かは、速度とサイズのどちらを重視するかによって異なります。私の経験では、気にする人はほとんどいません。32 ビット整数型を持たないプラットフォームはすでに非常に奇妙であり、ほとんどの人は自分のコードがその上で実行されるかどうか気にしないからです。

于 2013-11-04T23:58:38.553 に答える
17

uint32_tプラットフォームが正確に 32 ビット幅でパディングのない符号なし整数型をサポートしている場合にのみ存在します。

uint32_least_t常に存在し、少なくとも 32 ビットの符号なし整数型であり、そのような最小の型です。

uint32_fast_tも常に存在し、少なくとも 32 ビットの整数型であり、プラットフォームにとって「最も自然な」型、つまり操作が最も効率的なコードを生成する型です。

注: 符号付きバージョン にはint32_t、2 の補数の符号表現も必要です。

于 2013-11-05T00:01:19.460 に答える