当你知道基数为10的数字时,有人让我确定基数2中的数字有多少位数。
是否有任何方法可以确定基数2中数字的位数而不将数字从基数10转换为基数2?
此时我只知道如何在转换为基数2时确定数字的位数,只有在我计算基数2的数字时。
谢谢!
答案 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));
}
只要您在double
中有足够的精确度,这应该是精确的。
您可以为任何基础扩展此方法
template<int Base>
int number_of_base_N_digits(int x)
{
return 1 + static_cast<int>(log(x)/log(Base));
}
但由于实现了浮点算术,因此更容易遇到精度问题。即以上工作大多数在我的机器上都可以,但在3号基础上返回3位数1000。
答案 3 :(得分:1)
答案 4 :(得分:1)
由于此问题已标记为c++,因此我会尝试回答。
无符号(不是2的补码)数字 n 将占用std::floor(log2(k)) + 1
位来表示,这也是显着的数代表它的数字。
如果这是负面的,那么它将占据你所使用的单词或单词倍数的可用位的全部。