目录
总览
Problem-int
bitXor
- bitXor - x^y using only ~ and &
- Example: bitXor(4, 5) = 1
- Legal ops: ~ &
- Max ops: 14
要求只用“非”和“与”来表示“异或”。首先想到“异或的非=同或”:
x ⊕ y = x ‾ y + x y ‾ = x ‾ y ‾ ⋅ y ‾ x ‾ ‾ = ( x + y ‾ ) ⋅ ( x ‾ + y ) ‾ = x y + x ‾ y ‾ ‾ \begin{aligned}x\oplus y&=\overline{x}y+x\overline{y}\newline &=\overline{\overline{\overline{x}y}\cdot\overline{\overline{y}x}}\newline &=\overline{(x+\overline{y})\cdot(\overline{x}+y)}\newline &=\overline{xy+\overline{x}\overline{y}} \end{aligned} x⊕y=xy+xy=xy⋅yx=(x+y)⋅(x+y)=xy+xy
将里面的“或”变成“和”,只需利用德摩根定律:
x y + x ‾ y ‾ ‾ = x ⋅ y ‾ ⋅ x ‾ ⋅ y ‾ ‾ \begin{aligned} \overline{xy+\overline{x}\overline{y}}=\overline{x\cdot y}\cdot\overline{\overline{x}\cdot\overline{y}} \end{aligned} xy+xy=x⋅y⋅x⋅y
int bitXor(int x, int y) {
return ~(x&y)&(~x&~y);