0

I was told by an experienced programmer(spoj,codechef,topcoder etc ) than as a general rule one can use int for values upto 10^9.

What is the general rule for using signed long int, unsigned long int, signed long long int, unsigned long long int

4

7 に答える 7

4

この質問に対する答えは、プラットフォームによって異なります (プラットフォームによって整数のサイズが異なる可能性があるため)。http://en.cppreference.com/w/cpp/types/numeric_limitsで制限のかなり完全なリストを見つけることができます

于 2012-06-07T05:27:07.397 に答える
3

intandを主に使用するlongのは、これらの型を使用する API とやり取りするときです。たとえば、エラー コードとファイル記述子には型intftell戻り値がありますlongint扱う数値が非常に小さく、制限がある (つまり、完全に制御できないものに比例して大きくならない) ことがわかっている場合は、インデックス/カウンターにも使用できます。それ以外の場合は、メモリ内のオブジェクトのサイズ/インデックス/カウントに常に使用し、特定の既知の大きさの値を格納できるようにする必要がある場合はsize_t、正確なサイズまたは少なくともサイズの型を使用する必要があります。stdint.h

使用できない場合stdint.h(たとえば、C89 または古い C++ 実装で)、代わりに単純な古い型を使用できます。

  1. short少なくとも -32767 ~ 32767 の範囲を格納できます。
  2. unsigned short少なくとも 0 ~ 65536 の範囲を格納できます。
  3. int少なくとも -32767 ~ 32767 (および POSIX 準拠システムでは -2147483647 ~ 2147483647) の範囲を格納できます。
  4. unsigned少なくとも 0 から 65536 (および POSIX 準拠システムでは 0 から 4294967295) の範囲を格納できます。
  5. long少なくとも -2147483647 ~ 2147483647 の範囲を格納できます。
  6. unsigned long少なくとも 0 ~ 4294967295 の範囲を格納できます。
于 2012-06-07T05:27:08.863 に答える
1

自分でルールを開いてlimits.h推測できます。

#define LONG_MIN    (-2147483647L - 1) /* minimum (signed) long value */
#define LONG_MAX      2147483647L   /* maximum (signed) long value */
#define ULONG_MAX     0xffffffffUL  /* maximum unsigned long value */
#define LLONG_MAX     9223372036854775807i64       /* maximum signed long long int value */
#define LLONG_MIN   (-9223372036854775807i64 - 1)  /* minimum signed long long int value */
#define ULLONG_MAX    0xffffffffffffffffui64       /* maximum unsigned long long int value */
于 2012-06-07T05:27:00.637 に答える
0

移植性の制約によって異なります。正式には、anintは範囲内の値のみをサポートすることが保証されている[-32767,32767]ため、さらに必要な場合は、を使用する必要がありますlong。実際には、多くのプログラムは16ビットマシンへの移植性を必要とせず(今日では非常にまれです)、ほとんどの最新の64ビットプラットフォームでlongは、必要以上の64ビットになり、速度が低下します(地域性が低いためのみ)。int少なくとも32ビットであると想定できる場合は、次の例外を除いて、ほとんどすべての場所で使用する必要があります。

  • &ビット単位の|、、、、またはシフト演算子を使用した実際のビット単位の表現に関心がある場合は、デフォルトで型を使用する必要があります^が、次のいずれかの場合は他のサイズを使用します。~unsignedunsigned int

  • のモジュロ演算が必要な場合はunsigned、符号なし型を使用してください。これは非常にまれですが、ハッシュコードの計算などで発生します。

  • 非常に大きなテーブル(ベクトルまたはその他の連続した表現)がある場合は、shortまたはsigned char(またはunsigned shortunsigned charビット単位の表現に関心がある場合は、)を検討することもできます。符号は実装で定義されているため、文字以外にはプレーンを使用しません。char

  • 2 ^ 31より大きい値を表す必要がある場合は、を検討してlong longください。(ただし、long longそのような場合でも十分な大きさではないことが多く、何らかのBigIntegerクラスが必要になります。)

原則として、それ以外intは例外です。

于 2012-06-07T07:50:09.883 に答える
0

使用している libc に応じて、一般にint、などの制限値を示すマクロがあります。移植可能な例については、 gliblong intが提供する制限マクロを参照してください。

于 2012-06-07T05:27:24.300 に答える
0

標準ヘッダーclimitsまたは limits.hを確認することをお勧めします。

于 2012-06-07T05:27:43.357 に答える
0

原則として、符号付きのタイプの場合、タイプのサイズが n ビットの場合、

Max Positive Value = 2^(n-1)-1 <br>
Max Negative Value = -2^(n-1)

繰り返しますが、各プラットフォームにはバリエーションがある可能性があり、正確な値を取得するには、そのプラットフォームで利用可能な limits.h を参照する必要があります。

于 2012-06-07T05:27:46.003 に答える