使用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数字。