使用C++ boost库的按位操作

使用C++ boost库的按位操作

问题描述:

我是新的C++ boost库。我想在cpp_int类型上使用按位运算。下面的代码工作正常。使用C++ boost库的按位操作

#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; 
} 

然而,当我尝试从用户采取移值,我在(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; 
} 

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

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

所以,你可以在一个循环中使用uint64_t,每个时移高达UINT64_MAX,和递减c,当您去。据推测,你不需要移动超过几个bazillion数字。