使用c ++ boost库的按位运算

时间:2017-08-06 05:55:50

标签: c++ boost

我是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;
}

1 个答案:

答案 0 :(得分:2)

当右侧是内置整数类型时,按位移位仅在Boost Multiprecision中实现。你可以在这里看到:

http://www.boost.org/doc/libs/1_64_0/boost/multiprecision/number.hpp

因此,您可以在循环中使用uint64_t,每次最多移位UINT64_MAX,然后逐渐递减c。据推测,你不需要移动超过几亿个数字。