2012-04-07 105 views
1

什麼將持有類似3000000^2沒有溢出?什麼樣的數據類型將在C++中保存3000000^2?

+0

64位整數。 'unsigned long long'會保存它。 – Mysticial 2012-04-07 07:10:52

+2

所以將一個'std :: string'。 – Johnsyweb 2012-04-07 07:13:03

+0

我在這裏問了一個[相關問題](http://stackoverflow.com/questions/10053113/is-c11s-long-long-really-at-least-64-bits)。基本上,在C++(11)長期持有這種數字是唯一便攜的方式。 – juanchopanza 2012-04-07 10:29:06

回答

5

3000000^2是小於2^48,所以從cstdintstdint.h一個uint64_t將持有你的電話號碼具有良好的裕量。

+0

由於某些原因,當我嘗試這些數據類型時,它不會輸出正確的數字。 – WhatsInAName 2012-04-07 07:20:13

+1

@WhatsInAName:請用一些代碼來更新您的問題,這些代碼演示您正在嘗試解決的問題。 – Johnsyweb 2012-04-07 07:21:51

+5

'^'是按位異或運算符。 C++沒有指數運算符 – 2012-04-07 07:29:23

2

64位整數:

long long int 
1

當你說「類似」時,它表明你並不確定你想存儲的數字有多大。

看看here(說),看看哪個數字類型最適合您的應用程序。

請注意,該列表中有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 long long是唯一的標準整數,至少爲64位,所以你需要一個支持C++ 11的編譯器。但可能是你的編譯器支持其他一些非標準的64位類型。

+0

我得到以下消息:整型常量對於「long」類型來說太大(當我嘗試unsigned long long來存儲我的號碼時) – WhatsInAName 2012-04-07 07:24:31

+0

問題可能是在C++ 11之前沒有「標準」64位int,也許你的編譯器不支持C++ 11?你使用什麼編譯器? – juanchopanza 2012-04-07 07:31:15

相關問題