日本でハリウッドVFXを制作! 「経産省アイディアボックス」 結果:  
●まとめエントリはこちら ●FAQ ●お問い合わせは左のメールフォームから

2009年2月21日土曜日

論理演算 (1)

今日からしばらく、論理演算について勉強していくことにした。

プログラミングでは条件分岐が核となるということを以前につきとめたが、
(あくまで持論であり真偽は不明)
その中で、演算子は重要な役割をはたす。

Mayaヘルプの「値の検証と比較を行う」にMelで使われる演算子が表になっているが、
そこでも「論理演算子」がその一部となっている。

また先日の調べもののとき、見つけた「ITpro 5分で覚えるIT基礎の基礎
でも言われているように論理演算の習得はプログラミングにおいて必須のようだからだ。

プログラミング言語をマスターするには,論理演算を理解する必要があります。
論理演算が分からなければプログラムを作成できない,と言っても過言ではないでしょう。


Gihyo.jpの「はじめMath!Javaでコンピュータ数学」で
この論理の数学を学ぶことについて、もう少しその重要性を説明していた。


なぜプログラマが論理の数学を学ぶ必要があるのでしょう。
それは,論理の数学がプログラムの構造・動作を決定したり改善するのに役立つからです。

プログラムの骨組みとは論理構造です。
論理の数学は,理にかなって無駄がなく,美しいプログラムの骨組みをつくるために役立つのです。


--------------------
まず、細かなことを追求していく前に、論理演算の概略をつかんでおこうと思う。

論理演算と四則演算の大きな違いは,
論理演算が2進数の1けた(=1ビット)を対象としていることと,
演算結果が決してけた上がりしないことです。

論理演算は,2進数の1けたを対象として演算結果がけた上がりしないのですから,
0または1だけを演算し,その結果も0または1のいずれかになります。

複数けたの2進数で論理演算を行うこともできます。
ただし,論理演算はけた上がりをしないのですから,
複数けたの論理演算とは,1ビットごとの論理演算を複数同時に行っているのに過ぎません。


ここで重要なのは、
「論理演算は二進数の一桁を対象とした演算で、桁上がりしない。」
ということである。

ただしこれは、純粋にその計算を見た場合の最小単位で起きることであり、
おそらく実際のプログラム内では、もっと異なる対象を演算しているようにみえると思う。


つづけて「第二回 AND,OR,XOR,NOTの意味と使い方の総整理」をみてみた。

コンピュータは,あらゆるデータを数値で表します。

それなら,コンピュータは数値に対する四則演算だけができれれば十分なように思えます。
ところが実際には,そうではありません。

コンピュータは,本来なら数値でないデータも数値で表すからです。
このようなデータを演算する場合には,論理演算が大いに役に立ちます。

例えば,赤色と青色を混ぜ合わせて紫色というデータを得るには,赤色と青色でOR演算を行うことになります。
個々の論理演算の用途は一つに決まっているわけではありません。


そしてこのページのまとめは以下の通りだが、
それぞれの詳しい説明は一度このページを読んだほうがいい。

AND演算は「かつ」を表すもので,データをマスクするために使います。
OR演算は「または」を表すもので,データをセットするために使います。
XOR演算は「排他」を表すもので,データを部分的に反転するために使います。
NOT演算は「否定」を表すもので,データを全体的に反転するために使います。


第五回 真と偽の論理演算」ではさらに使い方についての説明があった。

If文の「もしも○○なら」の部分に複数のチェック条件を置くこともできます。

この場合には,個々のチェック条件を論理演算でつなぎます。

リスト3は,「もしも入力した値が100より大きくかつ 200より小さいなら,
メッセージ・ボックスを表示する」というプログラムです。
ここでは,And演算が使われています。

この場合には,個々のチェック条件の真偽に対して論理演算が行われるのです。
If a > 100 And a <>
「もしもa > 100というチェックの結果が真で,かつ,a <>
という意味です。


ここで、1ビットの計算を行うという点においては、具体的な演算だが、
最後の例ではA and Bのような、抽象的な概念を演算対象としている。

こういった抽象的概念への応用がほかにももっとあるなら
それを学習した方が、プログラミングには役に立つのではないか?


--------------------
メモ:

このページには、「比較演算」に関することで重要なこともかかれていた。

a > 100やa <>
意識していないプログラマが多いのですが,比較演算も演算の一種なのですから,
必ず演算結果の値を返します。
比較演算の結果は,真または偽のいずれかになります。

0 件のコメント:

コメントを投稿