10

私が考える 2 つの使用例がshort思い浮かびます。

  1. サイズが 16 ビット以上の整数型が必要です
  2. サイズが正確に 16 ビットの整数型が必要です

最初のケースでは、intは少なくとも 16 ビットであることが保証されており、最も効率的な整数データ型であるため、 を使用しますintshort2 番目のケースでは、標準ではのサイズが正確に 16 ビットであることを保証していないため、int16_t代わりに使用します。では、短いとはどのような用途ですか?

4

5 に答える 5

10

short16 ビット整数を持つ C99 環境で使用する理由はありません。int16_tint_fast16_tまたはint_least16_t代わりに使用できます。

使用する主な理由はshort、これらの型を提供しない C89 以前の環境との下位互換性、またはshortパブリック API の一部として使用するライブラリとの下位互換性、<stdint.h>それ自体を実装するため、または 16 ビット整数を持たないプラットフォームとの互換性のためです。彼らの C コンパイラは提供していませんint16_t

于 2012-04-20T23:01:09.273 に答える
3

ISO/IEC 9899:1999 (C99) はヘッダー<stdint.h>を追加<inttypes.h>し、必要なものを提供します。

  • int16_t定義されていない可能性がありますが、実装に 16 ビット (正確に) の整数型がある場合はint16_t、そのエイリアスになります。
  • int_least16_t少なくとも 16 ビットを保持する最小の型です。いつでもご利用いただけます。
  • int_fast16_t少なくとも 16 ビットを保持する最速の型です。いつでもご利用いただけます。

他のサイズについても同様: 8、16、32、64。

intmax_t最大精度の整数型もあります。もちろん、これらのそれぞれに unsigned 型もあります:uint16_tなど.

これらのタイプは、C2011 にも存在します。それらは C89 または C90 には存在しませんでした。ただし、ヘッダーは、C99 のサポートを提供していないと主張している MS Visual C のようなコンパイラであっても、ほとんどのコンパイラで何らかの形で利用できると思います。

<stdint.h>ヘッダーとヘッダーの POSIX 2008 バージョンへのリンクを示したことに注意してください<inttypes.h>。POSIX は、C 標準にはないルールを実装に課しています。

§7.18.1.1 正確な幅の整数型

¶1 typedef 名intN_tは、幅 N、パディング ビットなし、および 2 の補数表現を持つ符号付き整数型を指定します。したがって、int8_t正確に 8 ビット幅の符号付き整数型を示します。

¶2 typedef 名uintN_tは、幅 N の符号なし整数型を指定します。したがって、 uint24_t正確に 24 ビット幅の符号なし整数型を示します。

¶3 これらのタイプはオプションです。ただし、実装が幅 8、16、32、または 64 ビットの整数型を提供する場合、対応する typedef 名を定義する必要があります。

于 2012-04-20T22:59:49.873 に答える
1

はい、本当に特定のデータ サイズが必要な場合は、int16_t、int32_t などを使用します。

int16_t は通常、short (または 16 ビットにマップされるもの) からのプラットフォーム固有の typedef です。32 ビット マシンでは int16_t を short として typedef することができ、16 ビット マシンでは int16_t を int として typedef することができます。

于 2012-04-20T22:55:47.423 に答える
0

ANSI C は、型の最小値の範囲を指定します。確実なのは最初のケースだけです。2番目ではありません。

于 2012-04-20T22:55:51.927 に答える
0

非常に大きな配列がある場合は、ショーツを使用することをお勧めします。

ユニオンの一部として他のデータの一部を選択するのに役立つ場合があります。

于 2012-04-20T22:56:59.493 に答える