查找cpp_int的二进制长度的简单方法

时间:2014-08-05 06:56:10

标签: c++ boost binary

查找任意精度cpp_int的位数的最简单方法是什么? 例如,300可以用最少9位表示。

我想象一个反复右移直到值达到0的算法,我想知道是否有更简单的解决方案。

4 个答案:

答案 0 :(得分:1)

Boost有一个内置的最重要的位操作,例如参见this page

cpp_int i = 300;
unsigned int required_bits = msb(i);

答案 1 :(得分:0)

void main()
{
    int n = 0;
    int v = 1;
    int cpp_int = 1003;//any value you like
    for (int i = 0; i < 31; i++)
    {
        if (v >= cpp_int)
        {
            break;
        }
        v <<= 1;
        n++;
    }
    printf("%d", n);
}

//这是对于整数不大于32位表示。这有助于

答案 2 :(得分:0)

I post the image so you can see how it works in standard c++. it's not hard to translate to boost C++, the idea is exactly the same.

我发布图片,以便您可以看到它在标准c ++中的工作原理。转换为提升C ++并不难,这个想法完全一样。

答案 3 :(得分:0)

我找出了这个方法,它可以为您提供一个数字可以使用的最大位数。在代码中尝试以下行:

int ans = log2(cpp_int)+1;

表示整数n所需的位数是通过向下舍入log2(n)然后向其加1来给出的。

一般来说,log2(n)给出了获得&#39; n所需的2的幂。如果您已阅读有关二进制数的任何内容,则可以轻松了解我们为何使用基数为2的日志。

要使上述行有效,您必须包含&#39; math.h&#39;头文件为:

#include <math.h>