主要问题是:有多少位数?
让我解释一下。我有一个二进制的数字: 11000000,十进制数是192。
转换为十进制后,它将有多少位(二进制)?在我的例子中,它是3位数。但是,这不是问题。我在网上搜索,找到了一个整数部分的算法和一个分数部分的算法。我不太理解它们,但(我认为)它们是有效的。
当从二进制转换为八进制时,这更容易:每3位给你一个八进制的数字。十六进制也是如此:每个4位=1个十六进制数字。
但是,我很好奇,如果我有一个P数制的数字,并且想把它转换成Q数制,该怎么办呢?我知道怎么做(我想,我知道:),但是,首先,我想知道在Q系统中需要多少位(你不,我必须预先分配空间)。
发布于 2009-06-07 17:23:46
在我之前的回答中有一个错误:看看Ben Schwehn的评论。很抱歉造成混乱,我在下面找到并解释了我在之前的回答中所犯的错误。
请使用Paul Tomblin提供的答案。(重写为使用P、Q和n)
Y = ln(P^n) / ln(Q)
Y = n * ln(P) / ln(Q)因此,Y(向上舍入)是您在系统Q中需要的字符数,以表示您可以在系统P中以n个字符编码的最大数字。
我没有答案(这不会转换数字并在临时变量中占用那么多空间)来获得给定数字1000(bin) = 8(dec)的最小值,而您可以使用此公式保留2个小数位。
如果临时内存使用不是问题,您可以欺骗并使用(Python):
len(str(int(otherBaseStr,P)))这将为您提供将基数P中的数字转换为字符串(otherBaseStr)所需的小数位数。
旧的错误的答案:
如果您在P数制中有一个长度为n的数字,那么您可以计算n个字符中可能的最大数字:
P^(n-1)为了在数字系统Q中表示这个最大的数字,你需要使用对数(因为它们是指数的倒数):
log((P^(n-1))/log(Q)
(n-1)*log(P) / log(Q)例如,二进制形式的11000000是8个字符。要将其转换为Decimal,您需要:
(8-1)*log(2) / log(10) = 2.1 digits (round up to 3)错误的原因
N个字符中可能的最大数字为
(P^n) - 1不
P^(n-1)发布于 2009-06-07 17:05:43
在基数b中写入n取上限(对数基数b (n))位。
您注意到的比率(八进制/二进制)是对数底8 (n) /对数底2 (n) = 3。
(从记忆中看,它会坚持下去吗?)
发布于 2009-06-07 17:09:20
如果你有一个以B为底的X位数字,那么可以表示的最大值是B^X-1,所以如果你想知道它在以C为底的数字中可能需要多少位,那么你必须找到C^Y - 1至少和B^X - 1一样大的数字Y,方法是取B^X -1以C为底的对数。并且由于以C为底的数的对数( log )与该数的自然对数(ln)除以C的自然对数相同,这就变成:
Y = ln((B^X)-1) / ln(C) + 1由于ln(B^X)是X* ln(B),这可能比ln(B^X-1)的计算速度更快,并且足够接近正确的答案,因此重写为
Y = X * ln(B) / ln(C) + 1把它转换成你最喜欢的语言。因为我们去掉了"-1",所以在某些情况下,我们可能会比您需要的多一个数字。但更好的是,您可以预先计算ln(B)/ln(C),并将其乘以新的“X”,然后您尝试转换的数字的长度发生变化。
https://stackoverflow.com/questions/962301
复制相似问题