我使用boost :: multiprecision来获得固定但任意的精度整数。
我打算使用number<cpp_int<W, W, unsigned_magnitude, unchecked, void>>
。第一个显而易见的问题是:
此数据类型是否具有给定精度的任何无符号整数的标准位模式?我听说签名的扩展精确数字不使用2的补码,但我认为无符号的应该使用标准表示,或者我错过了什么?
如果是这种情况,那么我可以得到整数的总体数吗?我似乎不是任何公共接口来做到这一点。我也很高兴获得内部的方式 记忆,所以我可以计算用作存储的单个单词的数量。
谢谢
答案 0 :(得分:2)
使用lsb
和msb
获取最低和最高有效位的索引,然后使用bit_test
依次测试每个位:
#include <boost/multiprecision/number.hpp>
#include <iostream>
using namespace boost::multiprecision;
int main() {
constexpr unsigned W = 1024;
number<cpp_int_backend<W, W, unsigned_magnitude, unchecked, void>> num;
num = 43;
unsigned popcount = 0;
unsigned i = lsb(num);
unsigned const end = msb(num);
for (; i <= end; ++i) {
if (bit_test(num,i) != 0) {
++popcount;
}
}
std::cout << "Population Count: " << popcount << "\n"; //Prints '4'.
}