查找任意精度cpp_int
的位数的最简单方法是什么?
例如,300可以用最少9位表示。
我想象一个反复右移直到值达到0的算法,我想知道是否有更简单的解决方案。
答案 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)
我发布图片,以便您可以看到它在标准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>