如何使用二进制运算将整数除以 3
Posted
技术标签:
【中文标题】如何使用二进制运算将整数除以 3【英文标题】:How to divide an integer by 3 using binary operations 【发布时间】:2020-08-05 06:51:52 【问题描述】:类似问题:How to know if a binary number divides by 3?
但是如何仅使用二进制运算有效地将一个数字除以 3?
【问题讨论】:
【参考方案1】:主要思想是以下观察:
1/3 = 1/4 + 1/16 + 1/64 + ...
我们记住,除以 4 是一个简单的二进制运算(两个位移位)。 现在,由于我们正在处理整数,它可能不能被 4 的幂整除,我们必须进行适当的修改。令 x_0 为可被 3 整除的整数。我们有:
x_0 = 4*q_0 + r_0
其中 q_0 = x_0 // 4 和 r_0 = x_0 % 4,或者换句话说,
q_0 = x_0 >> 2, r_0 = x_0 & 3
对于这个 q_0,我们有
x_0 - 3*q_0 = q_0 + r_0
我们将 q_0 加到一个累加和中,现在我们要除以 x_1 := q_0 + r_0,我们知道它可以被 3 整除,并且比 x_0 小(大约 2 位)。在 x_k > 3 时迭代这个想法,诱导序列
q_0 + q_1 + ... + q_k
加起来就是想要的结果,x_0 / 3。
至于运算,我们有:位移、AND 和加法。使用 AND 和 XOR 可以通过二进制操作简单地实现加法。这是一些代码:
def binary_sum(a, b):
while True:
add = a ^ b # '^' is XOR
carry = a & b
if carry == 0:
break
else:
a = add
b = carry << 1
return add
def bin_division_by_3(x):
sum = 1
while x > 3:
q, r = x >> 2, x & 3
sum = binary_sum(sum, q)
x = binary_sum(q, r)
return sum
【讨论】:
以上是关于如何使用二进制运算将整数除以 3的主要内容,如果未能解决你的问题,请参考以下文章