[英]How do I get the population count of an unsigned unchecked number with boost::multiprecision?
我使用boost :: multiprecision具有固定但任意精度的整数。 我打算使用number<cpp_int<W, W, unsigned_magnitude, unchecked, void>>
。 第一个明显的问题是:
此数据类型是否具有给定精度的任何无符号整数的标准位模式? 我听说带符号的扩展精度数字不使用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'.
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.