1. xor = (a|b) & !(a&b)
2. для младшего бита
x(0) xor a(0) xor x(0) = b(0) => от x(0) ничего не зависит, т.е. если a(0) != b(0) , то решения нет вааще.
для бита 1:
С(1) = x(0) & (a(0) xor x(0)).
C(1) xor x(1) xor a(1) xor x(1) = b(1). т.е. от x(1) ничего не зависит, решение верно, если не было переноса, и a(1) = b(1), и наоборот, если перенос был, и a(1) != b(1). перенос был, если x(0)=1 и a(0) = 0.
для бита 2 и остальных продолжайте сами.