すぎたです。

# 論理学というのは知らないので xor に反応。

In message news:040909144249.M0189120@sma.gssm.otsuka.tsukuba.ac.jp
<kuno@gssm.otsuka.tsukuba.ac.jp> wrote ...

>   そう? だって A and B = 〜 (〜A or 〜B) でしょ? だからandかorの
> 片方あれば他方は作れる。で、A xor B = (A or B) and 〜(A and B)。

if 文に慣れてる人は、そちらで書いたほうがわかりやすいかも。

  if (a && b) {
  } else {
  }

else 側は !a || !b になるので、真偽を入れ換えて

  if (!(!a || !b)) {
  } else {
  }

まぁ、01 を書いてしまうのが一番わかりやすいという話はあります。

  a b and  /a/b  or not
  0 0  0    1 1  1  0
  0 1  0    1 0  1  0
  1 0  0    0 1  1  0
  1 1  1    0 0  0  1

あと xor の補足ですが、10 または 01 のとき 1 なので、

  (a && !b) || (!a && b)
= ((a && !a) || (a && !b)) || ((b && !b) || (!a && b))
= (a && (!a || !b)) || (b && (!a || !b))
= (a || b) && (!a || !b)
= (a || b) && !(a && b)

となります。

xor というと、以前、値の入れ換えに使っているのを見て
なるほどと思った憶えがあります。
# 良いかどうかは別にして。

  a ^= b
  b ^= a
  a ^= b

-- 
杉田
sugi-nws@bk.iij4u.or.jp