C#をつつく7ー論理演算。0と1の演算。
論理演算って聞いた事がないという人もいるからまずそこを説明するね。
コンピュータを制御するCPUは歴史的な事情とか効率の問題で0(False)と1(True)しかわからないように作られているんだ。 ここまでの説明で「あれ?でもさっきは10+2とかやってたよ」と普通の人は考えると思う。 だけど0と1を操作すればどんな数値でも扱えるんだ。
※その方法はちょっと難しいので、今回の記事は論理演算だけを扱います。
それを実現するのが論理演算で、それはAND、OR、NOT、排他的論理和の四つがあるんだ。 じゃあ、これからそれぞれを詳しく見ていこう。
まずはOR演算から行くよ。
OR論理演算はどちらかが1(True)かどうかを調べる演算と思えばいいよ。
じゃあ実際に計算してみるね。
using System;
class Program
{
static void Main( string[ ] args ) {
bool flag = false;
Console.WriteLine( "{0} OR {1} = {2}", flag, true, flag | true );
Console.WriteLine( "{0} OR {1} = {2}", flag, flag, flag | flag );
}
}
このコードを実行すれば、どちらかがTrueの場合演算結果がTrueになることが確認できたと思う。
次はAND演算をやってみよう。
AND論理演算はどちらも1(True)なのかを調べる演算と思えばいいよ。
じゃあ実際に計算してみるね。
using System;
class Program
{
static void Main( string[ ] args ) {
bool flag = true;
//一番最初だけ結果がTrueになる
Console.WriteLine( "{0} AND {1} = {2}", flag, true, flag & true );
Console.WriteLine( "{0} AND {1} = {2}", flag, false, flag & false );
flag = false;
Console.WriteLine( "{0} AND {1} = {2}", flag, true, flag & true );
Console.WriteLine( "{0} AND {1} = {2}", flag, false, flag & false );
}
}
OR演算よりも結果が厳しぃー。シビアな論理演算だね。
今度はNOT論理演算をしてみよう。これは単純。逆の事を言うだけだよ。
using System;
class Program
{
static void Main( string[ ] args ) {
bool flag = true;
Console.WriteLine( "{0} のNot演算結果は{1}", flag, !flag );
}
}
まるで天邪鬼だね。こんなの役に立つのか?と感じた人がいるかもしれないけどそれなりに重宝するんだ。
じゃあ最後の排他的論理行ってみようー。
using System;
class Program
{
static void Main( string[ ] args ) {
bool flag = true;
Console.WriteLine( "{0} XOR {1} = {2}", flag, true, flag ^ true );
Console.WriteLine( "{0} XOR {1} = {2}", flag, false, flag ^ false );
flag = false;
Console.WriteLine( "{0} XOR {1} = {2}", flag, true, flag ^ true );
Console.WriteLine( "{0} XOR {1} = {2}", flag, false, flag ^ false );
}
}
実行して結果を見てみよう。ちょっと難しいけどこれは片方がTrueの時のみTrueになっているんだ。
両方Trueの場合は0(False)なんだ。変わり者だねぇー。こんな論理演算使い道あるのか?とかなり疑問に思うだろうけど、
これはバイナリ(0と1)を直接扱うプログラムに結構使うんだ。
でも初心者はそんなことしないと思うから頭の片隅においておくだけでいいピヨ。
これで論理演算は全て学習したから終わるよ。
また見てね。