指数二进制数
Posted
技术标签:
【中文标题】指数二进制数【英文标题】:Exponent Binary Numbers 【发布时间】:2012-07-21 15:17:52 【问题描述】:有人能告诉我对二进制数求幂的逻辑吗?比如我想取110^10,但是不知道背后的逻辑。如果有人能提供给我,那将是一个很大的帮助..(我希望它以纯二进制完成,没有转换,也没有循环乘法。只是逻辑......)
【问题讨论】:
你问的是如何计算 6**2? 我想纯粹用二进制来做。没有转换,没有循环乘法,纯二进制逻辑.. 一切都是纯二进制逻辑,如果你想要固定精度(例如 uint16)逻辑,你可以避免循环,否则:否则我们不会有计算“功率”的算法,只有一些便宜的“纯二进制”操作 【参考方案1】:二进制指数非常容易。它们只是简单的添加和转换。
数字 110 是您的起点。 从数字 10(即 0)向后计算,它是零,所以这意味着“不要添加它”。
现在你左移 - 所以 110 变成 1100
现在您处理 10 的下一位(即 1) - 它是一个,所以这意味着“将它添加到结果中” - 到目前为止它是 0,因为我们还没有添加它,所以结果现在是 1100
没有更多的事情要做 - 所以答案是 1100
如果你在做 110^110 - 你会再做一个 - 所以 - 你再次转移并现在得到 11000。
最后一位又是一个,所以现在添加: 1100+ 11000 = 100100
110^10=1100 即 6^2=12
110^110=100100 即 6^6=36
【讨论】:
呃,这不是求幂。那是乘法,6^2!=12 但 6*2=12。【参考方案2】:peenut 是正确的,因为求幂并不关心你用什么基数来表示你的数字,而且我不知道你所说的“只是逻辑”是什么意思,但这里有一个尝试。
在 Wikipedia 上的快速搜索显示 this algorithm。基本思想是平方你的基础,存储结果,然后平方结果并重复。这将为您提供答案的因素,然后您可以将它们相乘。我认为它是一种“二进制搜索”风格的求幂算法,因为您可以通过平方和存储跳过很多中间步骤。
【讨论】:
【参考方案3】:Exponentiation 是独立于数字的实际文本表示的操作(例如,以 2 为底 - 二进制,以 10 为底 - 十进制)。
也许你想问一下二进制XOR(异或)运算?
【讨论】:
以上是关于指数二进制数的主要内容,如果未能解决你的问题,请参考以下文章