情報処理試験の基本である、論理演算。
否定、論理和、論理積、排他的論理和をはじめ、いろいろあります。
その中で今回は、「排他的論理和(xor)」のお話。
X xor Yなら、すぐにピンと来る人も多いと思いますが、情報処理試験ではたまに、「A xor B xor C xor … F xor G」といった長い排他論理演算をさせられることがあります(パリティの問題とか)。
or(論理和)なら、1つでも「1(True)」が入ってれば結果は「1(True)」、逆にand(論理積)なら、1つでも「0(False)」が入ってれば結果は「0(False)」とわかりやすいのですが、排他的論理和にもこのようにすぐに判断する方法はないのでしょうか?
実は、あります(だから書いてるわけです。笑)
ズバリ、「1(True)」が奇数個なら「1(True)」、偶数個なら「0(False)」!
わかりやすいでしょ?
ちなみに証明してみると、以下の通り。
前提として、X xor YはX = Yのとき「0」、X <> Yのとき「1」になります。
1) 1項めが「0」の場合
2項め以降で「1」が来るまではずっと「0」(「1」が偶数個)
→「1」がきたら(「1」が奇数個)、今度はそれ以降また「1」が来るまではずっと「1」
→「1」がきたら(「1」が偶数個)、今度はそれ以降また「1」が来るまではずっと「0」
→「1」がきたら(「1」が奇数個)、今度はそれ以降また「1」が来るまではずっと「1」
→・・・
1) 1項めが「1」の場合
2項め以降で「1」が来るまではずっと「1」(「1」が奇数個)
→「1」がきたら(「1」が偶数個)、今度はそれ以降また「1」が来るまではずっと「0」
→「1」がきたら(「1」が奇数個)、今度はそれ以降また「1」が来るまではずっと「1」
→「1」がきたら(「1」が偶数個)、今度はそれ以降また「1」が来るまではずっと「0」
→・・・
というわけで。
いちいち演算子の数だけ計算しなくても、式の中の「1(True)」の数を数えれば、
どんな長い排他的論理和演算でもすぐに「1(True)」か「0(False)」か判別できるというわけです。
論理演算自体は知ってる人でも、意外とこの法則を活用してない人がいたりします。
自分もその一人でしたが・・・
よければ使ってみてください。
では今日はここまで。
否定、論理和、論理積、排他的論理和をはじめ、いろいろあります。
その中で今回は、「排他的論理和(xor)」のお話。
X xor Yなら、すぐにピンと来る人も多いと思いますが、情報処理試験ではたまに、「A xor B xor C xor … F xor G」といった長い排他論理演算をさせられることがあります(パリティの問題とか)。
or(論理和)なら、1つでも「1(True)」が入ってれば結果は「1(True)」、逆にand(論理積)なら、1つでも「0(False)」が入ってれば結果は「0(False)」とわかりやすいのですが、排他的論理和にもこのようにすぐに判断する方法はないのでしょうか?
実は、あります(だから書いてるわけです。笑)
ズバリ、「1(True)」が奇数個なら「1(True)」、偶数個なら「0(False)」!
わかりやすいでしょ?
ちなみに証明してみると、以下の通り。
前提として、X xor YはX = Yのとき「0」、X <> Yのとき「1」になります。
1) 1項めが「0」の場合
2項め以降で「1」が来るまではずっと「0」(「1」が偶数個)
→「1」がきたら(「1」が奇数個)、今度はそれ以降また「1」が来るまではずっと「1」
→「1」がきたら(「1」が偶数個)、今度はそれ以降また「1」が来るまではずっと「0」
→「1」がきたら(「1」が奇数個)、今度はそれ以降また「1」が来るまではずっと「1」
→・・・
1) 1項めが「1」の場合
2項め以降で「1」が来るまではずっと「1」(「1」が奇数個)
→「1」がきたら(「1」が偶数個)、今度はそれ以降また「1」が来るまではずっと「0」
→「1」がきたら(「1」が奇数個)、今度はそれ以降また「1」が来るまではずっと「1」
→「1」がきたら(「1」が偶数個)、今度はそれ以降また「1」が来るまではずっと「0」
→・・・
というわけで。
いちいち演算子の数だけ計算しなくても、式の中の「1(True)」の数を数えれば、
どんな長い排他的論理和演算でもすぐに「1(True)」か「0(False)」か判別できるというわけです。
論理演算自体は知ってる人でも、意外とこの法則を活用してない人がいたりします。
自分もその一人でしたが・・・
よければ使ってみてください。
では今日はここまで。