如何使用boost :: multiprecision获取未签名的未检查数字的总数?

时间:2014-07-18 12:08:53

标签: c++ boost

我使用boost :: multiprecision来获得固定但任意的精度整数。 我打算使用number<cpp_int<W, W, unsigned_magnitude, unchecked, void>>。第一个显而易见的问题是:

此数据类型是否具有给定精度的任何无符号整数的标准位模式?我听说签名的扩展精确数字不使用2的补码,但我认为无符号的应该使用标准表示,或者我错过了什么?

如果是这种情况,那么我可以得到整数的总体数吗?我似乎不是任何公共接口来做到这一点。我也很高兴获得内部的方式 记忆,所以我可以计算用作存储的单个单词的数量。

谢谢

1 个答案:

答案 0 :(得分: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的文档。