我是c ++ boost库的新手。我想在cpp_int
类型上使用按位运算。下面的代码工作正常。
#include <boost/multiprecision/cpp_int.hpp>
#include <iostream>
namespace mp = boost::multiprecision;
using boost::multiprecision::cpp_int;
using namespace std;
int main(){
cpp_int p = 2;
cout<<mp::pow(p, 1024)<<endl;
return 0;
}
然而,当我尝试从用户那里获取移位值时,我得到一个&#34;不匹配运算符&lt;&lt;&#34; (p<<c)
行中的错误。
#include <boost/multiprecision/cpp_int.hpp>
#include <iostream>
namespace mp = boost::multiprecision;
using boost::multiprecision::cpp_int;
using namespace std;
int main(){
cpp_int p = 2, c;
//cout<<mp::pow(p, 1024)<<endl;
cin>>c;
cout << (p<<c) << endl;
return 0;
}
答案 0 :(得分:2)
当右侧是内置整数类型时,按位移位仅在Boost Multiprecision中实现。你可以在这里看到:
http://www.boost.org/doc/libs/1_64_0/boost/multiprecision/number.hpp
因此,您可以在循环中使用uint64_t
,每次最多移位UINT64_MAX
,然后逐渐递减c
。据推测,你不需要移动超过几亿个数字。