web-dev-qa-db-ja.com

long longとlongの違いは何ですか

Long longとlongの違いは何ですか?また、どちらも12桁の番号(600851475143)では機能しません。何か忘れていますか?

#include <iostream>
using namespace std;

int main(){
  long long a = 600851475143;
}
25
Hikari Iwasaki

標準で言えば、保証されるのは次のとおりです。

  • intは少なくとも16ビットでなければなりません
  • longは少なくとも32ビットでなければなりません
  • long longは少なくとも64ビットでなければなりません

主要な32ビットプラットフォーム:

  • intは32ビットです
  • longも32ビットです
  • long longは64ビットです

主要な64ビットプラットフォーム:

  • intは32ビットです
  • longは32ビットまたは64ビットです
  • long longも64ビットです

特定のアプリケーションに特定の整数サイズが必要な場合は、コンパイラが必要なサイズを選択するのではなく、#include <stdint.h>(または<cstdint>)を使用して、次のタイプを使用できます。

  • int8_tおよびuint8_t
  • int16_tおよびuint16_t
  • int32_tおよびuint32_t
  • int64_tおよびuint64_t

#include <stddef.h>(または<cstddef>)にも興味がある可能性があります。

  • size_t
  • ptrdiff_t
49
Joey Adams

long longはC++ 98/C++ 03には存在しませんが、C99およびc ++ 0xには存在します。

longは、少なくとも32ビットが保証されています。

long longは、少なくとも64ビットが保証されています。

@ildjarnのコメントを詳しく説明するには:

また、どちらも12桁の番号(600851475143)では機能しません。何か忘れていますか?

コンパイラーは、リテラル値600851475143を調べます考慮せずに割り当て先の変数/初期化に使用する変数。 int型付きリテラルとして記述したため、intに収まりません。

600851475143LLを使用して、long long型付きリテラルを取得します。

2
Karl Knechtel

コンパイラーに依存します.long longは64ビットであり、12桁を処理する必要があります。

0
msathia

C++コンパイラはlong longをサポートします。これは、C99標準(C++標準ではなくC標準)で少なくとも64ビットであることが保証されています。システムの範囲を取得するには、Visual C++ヘッダーファイルを参照してください。

勧告

新しいプログラムの場合、状況が発生して他のタイプの1つが必要になるまで、bool、char、int、およびdoubleのみを使用することをお勧めします。

http://www.somacon.com/p111.php

0
Craig White