see also xorとand see also ビット演算メモ
原則 ビット演算はビット毎の演算なので、1ビット同士の公式がそのままnビットの公式になる。 ただし、すべて0は正確には 0U であり、すべて1は正確には 0xF..F あるいは ~0U である。
注意 ==、!=、! は全てのビットに対する評価であるから、ビット反転~や^(0xffU)とは異なる振る舞いをする! 従って、以下の式変形に注意 (X == Y) = !(X^Y) != ~(X^Y)
補足 if( X ) は、Xのあるビットx_iが非零のとき真 == if(X != 0) if( !X ) は、Xの全てのビットが零のとき真 == if( X == 0 ) if( ~X ) は、Xの全てのビットが非零(1)のときに限って偽 if( X == ~0 )
簡約公式 X | X = X // 2X → X X ^ X = 0 // 2X (mod2) = 0X → 0 ※ X ^ X ^ X = X X & X = X // X^2 → X ※ (X | Y)^2 = (X | Y) 特に、X^2 | XY | Y^2 = X | Y
X | ~X = ~0 X ^ ~X = ~0 X & ~X = 0
X | 0 = X X ^ 0 = X X & 0 = 0
X | ~0 = ~0 X ^ ~0 = ~X X & ~0 = X
~(X | Y) = ~X & ~Y ~(X & Y) = ~X | ~Y ~(X ^ Y) = ~X ^ Y = X ^ (~Y) // !(X^Y) と混同しないように注意!
(X & Y) | Z = (X & Z) | (Y & Z) ※ → (X & Y) | X = X (X | Y) & Z = (X | Z) & (Y | Z) (X ^ Y) | Z = ? X & (Y ^ Z) & Z = (X & Y) ^ (X & Z) X ^ (Y & Z) = (X & ~(Y & Z)) | (~X & (Y & Z)) = X&~Y | X&~Z | ~X&Y&Z ※ X ^ (X & Y) = X & ~Y X ^ (Y | Z) = ~X&Y | ~X&Z | X&~Y&~Z ※ X ^ (X | Y) = ~X | Y
(X | Y) & (X | Y) = X | Y (X & Y) | (X & Y) = X & Y
X ^ Y = (X | Y) & (~X | ~Y) = (X & ~Y) | (~X & Y)
吸収公式 X | (X & Y) = X (X | Y) & (X | ~Y) = X (X | Y) & (X | Z) = X | (Y & Z)
等号 ※全てのビットに対する操作! (X == Y) = !(X^Y) (X != Y) = X^Y 特に、 (X==0) = !X // 全てのビットが零 (X!=0) = X // あるビットが非零