Long longとlongの違いは何ですか?また、どちらも12桁の番号(600851475143)では機能しません。何か忘れていますか?
#include <iostream>
using namespace std;
int main(){
long long a = 600851475143;
}
標準で言えば、保証されるのは次のとおりです。
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
long long
はC++ 98/C++ 03には存在しませんが、C99およびc ++ 0xには存在します。
long
は、少なくとも32ビットが保証されています。
long long
は、少なくとも64ビットが保証されています。
@ildjarnのコメントを詳しく説明するには:
また、どちらも12桁の番号(600851475143)では機能しません。何か忘れていますか?
コンパイラーは、リテラル値600851475143
を調べます考慮せずに割り当て先の変数/初期化に使用する変数。 int
型付きリテラルとして記述したため、int
に収まりません。
600851475143LL
を使用して、long long
型付きリテラルを取得します。
コンパイラーに依存します.long longは64ビットであり、12桁を処理する必要があります。
C++コンパイラはlong longをサポートします。これは、C99標準(C++標準ではなくC標準)で少なくとも64ビットであることが保証されています。システムの範囲を取得するには、Visual C++ヘッダーファイルを参照してください。
勧告
新しいプログラムの場合、状況が発生して他のタイプの1つが必要になるまで、bool、char、int、およびdoubleのみを使用することをお勧めします。