1）计算负数的逆元

def negative(n): return bit_add(~n, 1)

2）加法计算

def bit_add(a, b): b &= (2 ** 32 - 1) while b: tmp = a sum = tmp ^ b carry = (tmp & b) << 1 return a

3）减法计算

def bit_sub(a, b): return bit_add(a, negative(b))

4）乘法计算

def bit_mul(a, b): result = 0 while b: if b & 0x1: result = bit_add(result, a) b >>= 1 a <<= 1 return result

乘法模拟手工计算乘法的流程，将乘数b的二进制表示从左往右移动，当最低位为1时 (b & 0x1 == 1)，把被乘数a加到result中，同时将被乘数a向左移动一位。

5）除法计算

def bit_div(x, y): result = 0 for i in range(32)[::-1]: if (x >> i) >= y: result += (1 << i) x -= (y << i) return result

考虑32位整数表示 (64位改一下 i 就可以了)。从最大的倍数开始遍历，如果被除数x >> i 大于除数y，说明该位商为1，将1<<i加到结果中，并缩小x。