使用 c++ 提升库的按位操作
Bitwise operation using c++ boost library
我是 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
减少。 大概你不需要移动超过几个亿位数字。
相关文章:
- 对字符串进行位操作
- 对字符数组中的元素执行逐位操作
- 逐位操作的隐式类型转换
- 如何进行特定的位操作?
- C++避免位操作完全移位
- 使用双包装器类进行位操作(C++、clang)修复性能下降问题
- 使用位操作优化检查
- 子集相关位操作
- 使用 c++ 提升库的按位操作
- 位操作和异或
- 位操作将最左侧的设置位转换为右侧交替位?
- 为什么对小于 4 个字节的整数类型的位操作会发生意外行为?
- POD 类型的原子按位操作
- 如何使用位操作在单个整数中编码和解码两个数字
- __int128的位操作
- 使用位操作会影响内存消耗?
- 在具有位操作的函数中获得值
- C/C 位操作不会导致预期输出
- 在数组大小中使用位操作的原因
- 了解C++位操作中的二进制转换实现