使用 c++ 提升库的按位操作

Bitwise operation using c++ boost library

本文关键字:位操作 c++ 使用      更新时间:2023-10-16

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

但是,当我尝试从用户那里获取移位值时,我在(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减少。 大概你不需要移动超过几个亿位数字。