当您知道基数为10的数字时,确定基数2中的数字位数

时间:2016-11-17 13:24:16

标签: c++ numbers base

当你知道基数为10的数字时,有人让我确定基数2中的数字有多少位数。

是否有任何方法可以确定基数2中数字的位数而不将数字从基数10转换为基数2?

此时我只知道如何在转换为基数2时确定数字的位数,只有在我计算基数2的数字时。

谢谢!

5 个答案:

答案 0 :(得分:9)

我可能错了,但由于二进制数 n 位可以表示 2 n - 1 的最大十进制数,我会猜测十进制数 k 最多会占用 log 2 k + 1 位。

答案 1 :(得分:2)

只需将数字拉出数字,直到最终为零。

int ndigits(unsigned n)
{
  int c=0;

  while (n)
  {
    ++c;
    n >>= 1;
  }

  return c;
}

答案 2 :(得分:1)

您可以使用对数进行此类计算:

int number_of_base_2_digits(int x)
{
    return 1 + static_cast<int>(log2(x));
}

demo

只要您在double中有足够的精确度,这应该是精确的。

您可以为任何基础扩展此方法

template<int Base>
int number_of_base_N_digits(int x)
{
    return 1 + static_cast<int>(log(x)/log(Base));
}

但由于实现了浮点算术,因此更容易遇到精度问题。即以上工作大多数在我的机器上都可以,但在3号基础上返回3位数1000。

demo

答案 3 :(得分:1)

使用math.h提供的log2

numOfDigits = floor(log2(decimal_value) + 1);

Live demo.

答案 4 :(得分:1)

由于此问题已标记为,因此我会尝试回答。

无符号(不是2的补码)数字 n 将占用std::floor(log2(k)) + 1位来表示,这也是显着的数代表它的数字。

如果这是负面的,那么它将占据你所使用的单词或单词倍数的可用位的全部