【发布时间】:2019-12-30 12:43:59
【问题描述】:
我目前正在使用 python 中的“编程面试要素”,并且在这部分卡住了。下面的代码只是简单地将两个数字相乘而不使用任何运算符;作者给出的解释如下:
我们可以计算出最大的 k 使得 (2^k)y 11。我们从 (1011) 中减去 (1000) 得到 (11),加上 2^k = 2^ 2 = (100) 到商, 并继续将 x 更新为 (11)。
在每次迭代中找到最大 k 的更好方法是识别 它一直在减少。因此,而不是在每个测试 迭代 (2^0)y, (2^1)y, (2^2)y, ... 是否小于或等于 x,在我们最初找到满足 (2^k)y
def divide(x, y):
result, power = 0, 32
y_power = y << power
while x >= y:
while y_power > x:
y_power >>= 1
power -= 1
result += 1 << power
x -= y_power
return result
我的问题是:
- 算法的工作原理(概述)
- whey do power = 32
- 我们为什么要通过幂来移动 y (32)
- y_power 代表什么
- 我们为什么要加 1
【问题讨论】:
标签: python algorithm binary bit-manipulation bitwise-operators