Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 当您知道以10为基数的数字时,确定以2为基数的数字的位数_C++_Numbers_Base - Fatal编程技术网

C++ 当您知道以10为基数的数字时,确定以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; } 我可能错了,但由于

有人问我,当你知道以10为基数的数字时,以2为基数的数字有多少位数

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

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


谢谢大家!

继续从数字中提取位,直到最后得到零为止

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);