繁体   English   中英

如何通过boost :: multiprecision获得未签名的未经检查的数字的人口计数?

[英]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的补码,但我认为无符号的精度数字应使用标准表示形式,还是我缺少某些内容?

如果是这种情况,那么我可以得到整数的人口计数吗? 我似乎没有任何公共接口可以做到这一点。 我也很高兴获得一种内部存储器,这样我就可以计算用作存储的单个单词的数量。

谢谢

使用lsbmsb获取最低和最高有效位的索引,然后依次使用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'.
}

请参阅boost :: multiprecision :: number的文档。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM