Сложение двоичных однозначных чисел a и b:
Младший бит результата: a ^ b
Старший бит результата: a & b
(^ - исключающее "или", & - "и")
Сложение двоичных однозначных чисел a, b и c: Младший бит результата: a ^ b ^ c
Старший бит результата: (a & b) | (a & c) | (b & c)
(| - включающее "или")
Сложение многозначных чисел строится на базе сложения однозначных: s = a + b
Числа состоят из битов с номерами от 0 до x
s₀ = младший бит (a₀ + b₀)
c₀ = старший бит (a₀ + b₀)
s₁ = младший бит (a₁ + b₁ + c₀)
c₁ = старший бит (a₁ + b₁ + c₀)
s₂ = младший бит (a₂ + b₂ + c₁)
c₂ = старший бит (a₂ + b₂ + c₁)
...
sₓ₊₁ = cₓ
и т.д. до x-го бита, используя операции однобитного сложения, определённые выше.В старший (x + 1) бит результата входит только перенос. Сумма имеет разрядность на 1 бит больше слагаемых (как и в 10-тичной системе, сумма в общем случае - на 1 цифру больше, чем слагаемые, например, 90 + 90 = 180).
Знаки операций соответствуют их обозначению в Питоне.
def bitadd(a, b, c): return ((a ^ b ^ c), (a & b) | (a & c) | (b & c))
def bit(a, i): return (a >> i) & 1
def tobit(s, i): return s