在C ++中添加大于long long的数字

时间:2015-07-29 14:46:26

标签: c++

我想添加两个数字,这是长整数可以容纳的最大值;然后打印出来。如果我不将sum的值存储在变量中,我只需使用“cout”打印它然后我的计算机能够打印出来吗?代码将是这样的:

cout<<theLastValueOfLongLong + theLastValueOfLongLong;

我假设long long int是最大的主变量类型。

4 个答案:

答案 0 :(得分:1)

如果您不想溢出,则需要使用“长整数”库,例如Boost.Multiprecision.然后您可以执行任意长整数/ f.p.操作,例如

#include <iostream>
#include <limits>

#include <boost/multiprecision/cpp_int.hpp>

int main()
{
   using namespace boost::multiprecision;

   cpp_int i; // multi-precision integer 

   i = std::numeric_limits<long long>::max();

   std::cout << "Max long long: " << i << std::endl; 
   std::cout << "Sum: " << i + i << std::endl;
}

特别是,Boost.Multiprecision非常易于使用,并且“自然地”与C ++流集成,允许您将类型视为内置类型。

答案 1 :(得分:0)

不,首先它计算(theLastValueOfLongLong + theLastValueOfLongLong)(导致溢出或冻结最大值可用)然后将结果发送到cout.<<(long long)运算符

答案 2 :(得分:0)

它与:

相同
long long temp = theLastValueOfLongLong + theLastValueOfLongLong;
cout << temp;

temp将包含添加的结果,这将是未定义的,因为你得到一个溢出,然后它会输出结果它的值是什么。

答案 3 :(得分:0)

由于long long已签名,因此添加溢出。这是未定义的行为,任何事情都可能发生。它的不太可能格式化你的硬盘,特别是在这个简单的情况下。

一旦发生未定义的行为,您就无法依靠std::cout之后的工作。