2011-02-04 7 views
3

char型、short型、int型を1,2,4バイト幅にします。私はstdint.hヘッダーをソースに含めました。これにより、int8_t、int16_t、およびint32_tの整数型の幅が指定されることが保証されますか?これを達成する最良の方法は何ですか?C(stdint.h)の正確な幅の整数型

+0

OS /アーキテクチャが定義されています。 32ビットマシンの場合は、そのサイズにする必要があります。 – BlackBear

+0

はい、私はここで多くのコンパイラがstdint.hをサポートしていないことを読んでいます。 – ezpresso

+0

これはコンパイラ(および使用されているフラグ)によっても異なる場合があります。どのOS/CPU /コンパイラを使って作業していますか? –

答えて

7

これらのタイプが存在する場合、それらは正しい幅を持ち、2の補数でエンコードされます。

編集:あなたはタイプが

#ifdef INT32_MAX 
... 
#endif 

ようなものではなく、すべてのエンド・ユーザー・アーキテクチャ(PCなど)これらの型は、通常は存在しない上に存在するかどうかを確認することができるはずです。

+0

+1の「if」 - これらのタイプはオプションです。 –

+2

@Conrad - 利用可能でない場合に限ります。彼らが存在すれば、そこにいなければならない。 –

+0

右。しかし、それでも存在することは保証されていません(整数演算/ロードとストアを64ビットと8ビットの値でしか許さない合理的なアーキテクチャを想像しているかもしれません)。 –

3

stdint.hで定義されているタイプの全目的は、指定された幅であることです。だから、int8_tは、8ビット幅となり、int16_t - など16ビット幅は、

1

stdint.hいくつかの正確な幅の整数型を。これらは、(wikipediaから)です:あなたはサイズが明確何のためにあるのかを知りたい場合は

Specifier Signing  Bits Bytes 
int8_t  Signed  8  1  
uint8_t  Unsigned  8  1  
int16_t  Signed  16  2  
uint16_t  Unsigned  16  2  
int32_t  Signed  32  4  
uint32_t  Unsigned  32  4  
int64_t  Signed  64  8 
uint64_t  Unsigned  64  8  

は、それらを使用してください。 C99では、これらのタイプに指定されたサイズが必要です。他のすべてのタイプはプラットフォームに依存します。

その他のタイプは、limits.hのように一定の最小幅であることが保証されています。しかし、それは同じくらい大きいかもしれません。それは実装次第です。

1

C99のstdint.hは、実際にこれらの型が存在することを保証しません。 wikipediaを引用すると:

実装は8、16、32または64の幅の種類をサポートしていない限り、これらのタイプはオプションで、それは

対応N.に対応するタイプにそれらをtypedefのものが、の場合はが存在し、正しい幅になります。

+3

実際には、実装で2の補数表現を使用しない場合は、符号付きの型を定義することは標準ではオプションと考えられます。 7.18.1.1完全な整数型¶3:「これらの型はオプションです。しかし、実装が8,16,32、または64ビットの幅を持つ整数型を提供し、パディングビットがなく、2の補数表現を持つ(符号付きの型の場合)対応するtypedef名を定義するものとします。 –

関連する問題