2012-04-07 90 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

相关问题