2011-06-24 7 views
18

longとlongの違いは何ですか?両方とも12桁の数字では動作しません(600851475143)、何か忘れていますか?longとlongの違いは何ですか

#include <iostream> 
using namespace std; 

int main(){ 
    long long a = 600851475143; 
} 
+12

「long long a = 600851475143LL;」とすると動作します。 – ildjarn

+9

long longとlongの違いは長いです。 –

答えて

32

  • int
  • longが32ビット同様
  • long longある32ビット
  • される64ビットのメジャーで

あります64ビットプラットフォーム:

  • int 32ビット
  • longある32ビットまたは64ビット
  • long longのいずれかである64ビットならびに
  • 標準で行く

ある:

  • intはでなければなりません少なくとも16ビット
  • long少なくとも32ビット
  • long longでなければなりませんが、私が間違っている場合は、少なくとも64ビット

が私を修正しなければなりません。

あなたではなく、あなたが希望のサイズを選択するコンパイラを信頼するよりも、特定のアプリケーションのための具体的な整数のサイズを、必要な場合は、#include <stdint.h>(または<cstdint>)あなたはこれらの型を使用することができます。

  • int8_tuint8_t
  • int16_tuint16_t
  • int32_tuint32_t
  • int64_tuint64_t

また#include <stddef.h>(または<cstddef>)に興味があるかもしれない:

  • size_t
  • ptrdiff_t
+0

「longは32ビットか64ビットか」という意味はどうですか?ビットを変更できますか? –

+2

@岩崎ひかり:ターゲットに依存します。たとえば、Windowsでコンパイルしている場合は32ビット、Linux x86-64では64ビットの場合があります。型は実行時にサイズを変更しません。 –

7

long longはC++ 98/C++ 03に存在しないが、C99およびC++ 0Xで存在します。

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

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

0

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

勧告

状況は、他のタイプのいずれかが必要になるという問題が発生するまで、それは、その1つの使用にのみBOOL、CHAR、INT、およびダブルをお勧めします。主要な32ビット・プラットフォームで

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

0

は、あなたが長いcompiler.longに依存64ビットとすべきです12桁の数字を扱います。あなたのケースのように見えるのは、長めに考えて12桁の数字を扱っていないからです。 ildjarnさんのコメント@については詳しく説明し

2

そして、彼らの両方が、12桁の番号(600851475143)では動作しませんが、私は何かを忘れていますか?

コンパイラは、あなたがそれを初期化/に割り当てている変数を考慮せずに、リテラル値600851475143に見えます。 int型付きリテラルとして書いてあり、intには収まらないでしょう。

600851475143LLを入力すると、入力されたリテラルがlong longになります。

関連する問題