2012-04-07 11 views
1

オーバーフローせずに3000000^2のようなものを保持するのは何ですか?C++で3000000^2を保持するデータ型の種類は何ですか?

+0

64ビット整数。 'unsigned long long'はそれを保持します。 – Mysticial

+2

'std :: string'も同様です。 – Johnsyweb

+0

[関連する質問](http://stackoverflow.com/questions/10053113/is-c11s-long-long-really-at-least-64-bits)に尋ねました。基本的には、C++(11)では、このような番号を保持する唯一の移植可能な方法です。 – juanchopanza

答えて

5

3000000^2は2^48未満であるので、cstdintからuint64_tまたはstdint.hは良い余裕を持ってあなたの番号を保持します。

+0

これらのデータ型を試すと何らかの理由で正しい番号が出力されません。 – WhatsInAName

+1

@WhatsInAName:解決しようとしている問題を示すコードで質問を更新してください。 – Johnsyweb

+5

'^'はビット単位のxor演算子です。 C++には指数演算子がありません –

2

64ビット整数:

long long int 
1

あなたが「何かのような」と言ったとき、実際にあなたが記憶したい数がどれほど大きいか確かではないことを示唆しています。

here(say)を見て、アプリケーションに最適な数値タイプを確認してください。

このリストには64ビット整数があります。それはどこでも利用できるわけではないからです。

2

std::numeric_limitsで確認できます。 C++ 11では、long longは、少なくとも64ビットの標準の整数であり、したがって、例えば、unsigned long longは、これらの制限を有している:

私のプラットフォーム上で製造
#include <iostream> 
#include <limits> 


int main() { 
    std::cout << "sizeof : " << sizeof(unsigned long long) << "\n"; 
    std::cout << "min : "<< std::numeric_limits<unsigned long long>::min() << "\n"; 
    std::cout << "max : "<< std::numeric_limits<unsigned long long>::max() << "\n\n"; 
} 

sizeof : 8 
min : 0 
max : 18446744073709551615 

C++は、さまざまな整数を提供しますしかし、私が知っている限り、64ビットの型は標準のpre-C++ 11で義務付けられていませんでした。 I は64ビット以上の唯一の標準整数なので、C++ 11をサポートするコンパイラが必要です。しかし、あなたのコンパイラがいくつかの他の非標準の64ビットタイプをサポートしている可能性があります。

+0

整数定数が "long"型には大きすぎます(私の数値を格納するのに長い長さの符号なしを試してみると) – WhatsInAName

+0

問題は、C++ 11より前には「標準」64ビットintがなかった可能性があります。おそらくあなたのコンパイラはC++ 11をサポートしていませんか?どのコンパイラを使用していますか? – juanchopanza

関連する問題