Python 不使用算术运算符计算x/y

Python 不使用算术运算符计算x/y,python,algorithm,binary,bit-manipulation,bitwise-operators,Python,Algorithm,Binary,Bit Manipulation,Bitwise Operators,我目前正在用python进行“编程元素访谈”,并在这一部分陷入了困境。下面的代码只是将两个数字相乘,而不使用任何运算符;作者给出的解释如下: 我们可以计算最大的k,使得(2^k)y=1 功率-=1 结果+=1这是二进制数的长除法。你可能在学校里学过十进制数 如果我们想将x除以y我们会问自己,“如果我们在x中添加尽可能多的零,那么y可以容纳多少次?”。将n个零添加到y相当于乘以2^n或向左移动n power = 32 y_power = y << power 在内环中,它将测试y_p

我目前正在用python进行“编程元素访谈”,并在这一部分陷入了困境。下面的代码只是将两个数字相乘,而不使用任何运算符;作者给出的解释如下:

我们可以计算最大的k,使得(2^k)y=1 功率-=1
结果+=1这是二进制数的长除法。你可能在学校里学过十进制数

如果我们想将
x
除以
y
我们会问自己,“如果我们在
x
中添加尽可能多的零,那么
y
可以容纳多少次?”。将n个零添加到
y
相当于乘以2^n或向左移动n

power = 32
y_power = y << power
在内环中,它将测试
y_power
是否已安装到
x
中,如果未安装,它将“向右移动一位”

正如你们从长除法中所知道的,我们现在需要从被除数中减去除数的这个倍数,
y
,然后继续计算结果

while x >= y:
如果此差异
y
小于
x
,我们将停止,因此2^power*
y
不可能适合
x

示例 让我们计算15/5:

 1111 / 101 = 11
-1010
------
  101
 -101
------
    0
我们有
x
=1111和
y
=101,为了简洁起见,我们从
power=1开始。首先我们计算
y\u幂=y
result += 1 << power
x -= y_power
while x >= y:
 1111 / 101 = 11
-1010
------
  101
 -101
------
    0