longとlongの違いは何ですか?両方とも12桁の数字では動作しません(600851475143)、何か忘れていますか?longとlongの違いは何ですか
#include <iostream>
using namespace std;
int main(){
long long a = 600851475143;
}
longとlongの違いは何ですか?両方とも12桁の数字では動作しません(600851475143)、何か忘れていますか?longとlongの違いは何ですか
#include <iostream>
using namespace std;
int main(){
long long a = 600851475143;
}
:
int
は long
が32ビット同様long long
ある32ビットあります64ビットプラットフォーム:
int
32ビットlong
ある32ビットまたは64ビットlong long
のいずれかである64ビットならびにある:
int
はでなければなりません少なくとも16ビットlong
少なくとも32ビット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は32ビットか64ビットか」という意味はどうですか?ビットを変更できますか? –
@岩崎ひかり:ターゲットに依存します。たとえば、Windowsでコンパイルしている場合は32ビット、Linux x86-64では64ビットの場合があります。型は実行時にサイズを変更しません。 –
long long
はC++ 98/C++ 03に存在しないが、C99およびC++ 0Xで存在します。
long
は、少なくとも32ビットが保証されています。
long long
は、少なくとも64ビットが保証されています。
あなたのC++コンパイラはlong longをサポートしています。これは、C99標準(C++標準ではなくC標準)で少なくとも64ビットであることが保証されています。システム上の範囲を取得するには、Visual C++ヘッダーファイルを参照してください。新しいプログラムでは
勧告
状況は、他のタイプのいずれかが必要になるという問題が発生するまで、それは、その1つの使用にのみBOOL、CHAR、INT、およびダブルをお勧めします。主要な32ビット・プラットフォームで
は、あなたが長いcompiler.longに依存64ビットとすべきです12桁の数字を扱います。あなたのケースのように見えるのは、長めに考えて12桁の数字を扱っていないからです。 ildjarnさんのコメント@については詳しく説明し
:
そして、彼らの両方が、12桁の番号(600851475143)では動作しませんが、私は何かを忘れていますか?
コンパイラは、あなたがそれを初期化/に割り当てている変数を考慮せずに、リテラル値600851475143
に見えます。 int
型付きリテラルとして書いてあり、int
には収まらないでしょう。
600851475143LL
を入力すると、入力されたリテラルがlong long
になります。
「long long a = 600851475143LL;」とすると動作します。 – ildjarn
long longとlongの違いは長いです。 –