Python 不使用算术运算符计算x/y
我目前正在用python进行“编程元素访谈”,并在这一部分陷入了困境。下面的代码只是将两个数字相乘,而不使用任何运算符;作者给出的解释如下: 我们可以计算最大的k,使得(2^k)y=1 功率-=1Python 不使用算术运算符计算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
结果+=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