👽
PHP で XNOR がやりたい時
1 bit の入力$a,$bに対して、 1 bit の出力$xをつくる排他的論理和の否定(XNOR)を行いたい時、PHPで書く場合は、
const BIT_MASK = 0b1;
$a = 0b1; // or 0b0
$b = 0b1; // or 0b0
$x = ((~($a ^ $b)) & BIT_MASK);
と書きます。
PHPでは Bit 数を指定できないので、~ 0b0が0b1111...となり、 INT 型では-1になってしまいます。そのため& BIT_MASKをする必要があります。
排他的論理和の否定(XNOR)
排他的論理和の否定は以下の真偽値表の値をとります。
| $a | $b | $x |
|---|---|---|
| 0 | 0 | 1 |
| 1 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 1 | 1 |
備考
0b11111111と書くと 10 進数の 255 と等価の 2 進数が書けます。
$a ^ $bで$aと$bの排他的論理和をとります。
Discussion