char型、short型、int型を1,2,4バイト幅にします。私はstdint.hヘッダーをソースに含めました。これにより、int8_t、int16_t、およびint32_tの整数型の幅が指定されることが保証されますか?これを達成する最良の方法は何ですか?C(stdint.h)の正確な幅の整数型
答えて
これらのタイプが存在する場合、それらは正しい幅を持ち、2の補数でエンコードされます。
編集:あなたはタイプが
#ifdef INT32_MAX
...
#endif
ようなものではなく、すべてのエンド・ユーザー・アーキテクチャ(PCなど)これらの型は、通常は存在しない上に存在するかどうかを確認することができるはずです。
+1の「if」 - これらのタイプはオプションです。 –
@Conrad - 利用可能でない場合に限ります。彼らが存在すれば、そこにいなければならない。 –
右。しかし、それでも存在することは保証されていません(整数演算/ロードとストアを64ビットと8ビットの値でしか許さない合理的なアーキテクチャを想像しているかもしれません)。 –
stdint.h
で定義されているタイプの全目的は、指定された幅であることです。だから、int8_t
は、8ビット幅となり、int16_t
- など16ビット幅は、
かを確認することができます:Size of int in C on different architectures
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
のように一定の最小幅であることが保証されています。しかし、それは同じくらい大きいかもしれません。それは実装次第です。
C99のstdint.hは、実際にこれらの型が存在することを保証しません。 wikipediaを引用すると:
実装は8、16、32または64の幅の種類をサポートしていない限り、これらのタイプはオプションで、それは
対応N.に対応するタイプにそれらをtypedefのものが、の場合はが存在し、正しい幅になります。
実際には、実装で2の補数表現を使用しない場合は、符号付きの型を定義することは標準ではオプションと考えられます。 7.18.1.1完全な整数型¶3:「これらの型はオプションです。しかし、実装が8,16,32、または64ビットの幅を持つ整数型を提供し、パディングビットがなく、2の補数表現を持つ(符号付きの型の場合)対応するtypedef名を定義するものとします。 –
- 1. GCCで正確な幅の整数型はどのように実装されていますか?
- 2. いつstdint.hで定義された整数型を使うべきですか?
- 3. C++リテラル整数型
- 4. C++の固定幅整数リテラル?
- 5. C++の浮動小数点型の2つの変数の正確な比較
- 6. 正しく整数型
- 7. 1292不正確な整数値
- 8. C++ - 14整数型に
- 9. Math.FloorとC#の整数型へのキャスト
- 10. 不正確な整数値:列エラーのための ''
- 11. Grails:不正確な整数値:行1の 'scenarioId'列の '¬' '
- 12. double型の不正確な除算(Visual C++ 2008)
- 13. 整数の乗算による不正確な結果
- 14. 不正な整数値の整列
- 15. C# - 整数の正しい検証
- 16. C++ - 整数による整数除算の返答が正しくない
- 17. 安全な整数型キャスト用のC++テンプレート
- 18. C#ではどのような型が整数リテラルですか?
- 19. オブジェクトリテラル。不正確タイプは正確な型(なしオブジェクトスプレッド)
- 20. 整数型と長整数型のベクトルの差
- 21. groovyの整数型と整数型の違い
- 22. C#非整数列挙型と
- 23. C++整数型自動64ビット
- 24. 正確な数
- 25. 幅が正確に800ピクセル
- 26. C++アプリケーションの帯域幅調整
- 27. Hibernate idsの不明な整数データ型
- 28. Racket - 不正確な値に最も近い整数を取る
- 29. C++でdouble型の可変乗算が不正確な値になる
- 30. Djangoの正確なページビュー数
OS /アーキテクチャが定義されています。 32ビットマシンの場合は、そのサイズにする必要があります。 – BlackBear
はい、私はここで多くのコンパイラがstdint.hをサポートしていないことを読んでいます。 – ezpresso
これはコンパイラ(および使用されているフラグ)によっても異なる場合があります。どのOS/CPU /コンパイラを使って作業していますか? –