ビット演算

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   // あるビットが非零
最終更新:2012年09月23日 18:21
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。