C++ 当您知道以10为基数的数字时,确定以2为基数的数字的位数
有人问我,当你知道以10为基数的数字时,以2为基数的数字有多少位数 是否有任何方法可以在不将数字从基数10转换为基数2的情况下确定基数2中数字的位数 此时,我只知道在转换为基数2时如何确定数字的位数,只要我计算基数2中的数字C++ 当您知道以10为基数的数字时,确定以2为基数的数字的位数,c++,numbers,base,C++,Numbers,Base,有人问我,当你知道以10为基数的数字时,以2为基数的数字有多少位数 是否有任何方法可以在不将数字从基数10转换为基数2的情况下确定基数2中数字的位数 此时,我只知道在转换为基数2时如何确定数字的位数,只要我计算基数2中的数字 谢谢大家! 继续从数字中提取位,直到最后得到零为止 int ndigits(unsigned n) { int c=0; while (n) { ++c; n >>= 1; } return c; } 我可能错了,但由于
谢谢大家! 继续从数字中提取位,直到最后得到零为止
int ndigits(unsigned n)
{
int c=0;
while (n)
{
++c;
n >>= 1;
}
return c;
}
我可能错了,但由于n位的二进制数可以表示2n-1的最大十进制数,我猜十进制数k最多会占用log2k+1位 这种计算可以使用对数:
int number_of_base_2_digits(int x)
{
return 1 + static_cast<int>(log2(x));
}
但由于浮点运算是如何实现的,所以更容易遇到精度问题。也就是说,上述操作在我的机器上基本正常,但以3为基数返回3位数字表示1000
使用由math.h
提供
numOfDigits = floor(log2(decimal_value) + 1);
由于此问题已标记,我将尝试相应地回答 一个无符号的(不是2的补码)数字n将占据要表示的
std::floor(log2(k))+1位,这也是表示它所需的有效位数
如果是负数,它将占用您正在使用的单词或单词倍数的所有可用位。您是否要求有效数字?
numOfDigits = floor(log2(decimal_value) + 1);