矢沢 久雄 グレープシティ アドバイザリースタッフ

 これまでは,2進数の数値である0と1に対する論理演算を行ってきました。連載の第1回で,0を偽(ウソ)と読み1を真(ホント)と読めば,論理演算は真偽を演算するものとなると説明しましたね。論理演算で真偽を演算するのは,主にプログラミングを行う場合です。真偽に対する演算を「論理演算」と呼び,0と1という数値に対する演算を「ビット演算」と呼んで区別する場合もあります。

 今回は,VBScript(Visual Basic Scripting Edition)というプログラミング言語を使って簡単なプログラムを作成しながら,論理演算がどのように活用されるかを説明します。Windowsに添付されているメモ帳などのテキスト・エディタでプログラムを記述し,“Test.vbs”のようにファイル名の拡張子を.vbsとして保存すれば,ファイルをダブルクリックするだけですぐに実行できます。Windows(Windows 98/Me/2000/XP)には,VBScriptを解釈・実行するWSH(Windows Scripting Host)をいう機能が組み込まれているからです。何事も体験することで理解が深まりますので,ぜひ試してみてください。

●VBScriptのウォーミングアップ

 まったくプログラミングしたことがない人も,心配しないでください。VBScriptは,とっても簡単なプログラミング言語です。ウォーミングアップとして,簡単なプログラムを作ってみましょう。

 メモ帳を起動したら,リスト1のプログラムを打ち込んで,Test.vbsというファイル名でデスクトップに保存してください。プログラムは,スペースも含めてすべて半角の英数記号で入力します。このプログラムは,変数aに123という値を代入し(a = 123),変数aの値をメッセージボクスに表示する(MsgBox a)ものです。MsgBoxは,メッセージ・ボックスを表示する命令です。

リスト1●簡単なプログラム
a = 123
MsgBox a

図1●リスト1の実行結果
 デスクトップに保存されたTest.vbsのアイコンをダブルクリックするとプログラムが実行され,メッセージ・ボックスに123という値が表示されます(図1)。

●If文で活用される論理演算

 VBScriptには,If文(イフぶん)という命令があります。If文は,英語のifと同様に「もしも○○なら,△△する」という処理を表します。この「もしも○○なら」の部分には,変数の値をチェックする条件が置かれるのが一般的です。リスト2は,数字を入力し,「もしも入力した値が100より大きいなら,メッセージ・ボックスを表示する」というプログラムです。

リスト2●If文の使い方
a = InputBox("数字を入力してください")
If a > 100 Then
MsgBox a
End If

 If文の「もしも○○なら」の部分に複数のチェック条件を置くこともできます。この場合には,個々のチェック条件を論理演算でつなぎます。VBScriptでは,論理演算をAnd命令,Or命令,Xor命令,Not命令で表します。リスト3は,「もしも入力した値が100より大きくかつ200より小さいなら,メッセージ・ボックスを表示する」というプログラムです。ここでは,And演算が使われています。

リスト3●2つのチェック条件をAnd演算でつなぐ
a = InputBox("数字を入力してください")
If a > 100 And a < 200 Then
MsgBox a
End If

 プログラミングでは,チェック条件をつなぐために論理演算が活用されます。この場合には,個々のチェック条件の真偽に対して論理演算が行われるのです。If a > 100 And a < 200 Thenは,「もしもa > 100というチェックの結果が真で,かつ,a < 200というチェックの結果が真なら」という意味です。

●比較演算は真偽値を返す

 a > 100やa < 200のようなチェックを行うことを「比較演算(ひかくえんざん)」と呼びます。意識していないプログラマが多いのですが,比較演算も演算の一種なのですから,必ず演算結果の値を返します。比較演算の結果は,真または偽のいずれかになります。

 コンピュータは,あらゆるデータを数値で表すのですから,真や偽も内部的に数値として取り扱われています。何という数値を使うかは,プログラミング言語の種類によって若干異なります。VBScriptの場合はどうでしょう? リスト4のプログラムを実行して確かめてみましょう。

リスト4●真偽を表す数値を調べる
x = CInt(100 > 0)
MsgBox x
y = CInt(100 < 0)
MsgBox y

図2●VBScriptの真偽値
 x = CInt(100 > 0)は,100 > 0という比較演算の結果(100は0より大きいのですから真です)を表す数値を変数xに代入するものです。CIntは,演算結果を整数に変換する命令です。VBScriptは親切なので,CIntを使わないでx = 100 > 0とすると,変数xの値を”True”という文字列にしてしまいます。次のMsgBox xで,変数xの値をメッセージ・ボックスに表示します。y = CInt(100 < 0)は,100 < 0という比較演算の結果(100は0より小さくないのですから偽です)を表す数値を変数yに代入するものです。次のMsgBox yで,変数yの値をメッセージ・ボックスに表示します。プログラムを実行すると,真を-1,偽を0で表していることがわかります(図2)。

 真を1とした方がわかりやすいと思われるかもしれませんが,-1にした方が意味的に合っているのです。真は「NOT偽」だと言えます。真偽を何ビットの数値で表してるかわかりませんが,偽は0なのですから,すべてのビットが0の2進数になります。もしも,8ビットだとしたら00000000です。NOT00000000すなわち00000000をすべて反転すると11111111になります。すべてのビットが1の2進数は補数表現で-1を表しています。したがって,偽が0なら真は-1でつじつまが合うのです(実際には,VBScritでは,0を偽,0でないすべての数値を真とみなします。真を代表する値が-1だと考えてください)。

図3●リスト5の実行結果

●ド・モルガンの法則の確認

 最後に,AND演算とOR演算を相互に変換するド・モルガンの法則を確認するプログラムを作ってみましょう(リスト5)。ここでは,変数aの値を-1(真),変数bの値を0(偽)としていますが,他のパターンでも試してみてください。実行結果を図3[拡大表示]に示します。

リスト5●ド・モルガンの法則を確認するプログラム
a = -1
b = 0
x = Not(a And b)
y = (Not a) Or (Not b)
If x = y Then
MsgBox "AndをOrに変換できました!"
End If
x = Not(a Or b)
y = (Not a) And (Not b)
If x = y Then
MsgBox "OrをAndrに変換できました!"
End If

 5回に渡って論理演算の意味と使い方を説明してきました。必ず知っておいてほしい基礎知識は,すべて伝えたつもりです。それをどう応用するかは,皆さんにお任せします。論理演算をマスターしたことで,皆さんのコンピュータに対する理解が深まり,コンピュータをますます好きになったのではないでしょうか。そうであれば,筆者としても至上の喜びです。連載をお読みいただき,ありがとうございました。またお会いしましょう!