普通の加算演算と比べてみよう
ではここでちょっとクイズです。さきほどの例、論理和でなく普通の足し算ならどうなるでしょうか。5+3だから8!と暗算せずに、いちど2進数で紙に書いて計算してみてください。考察したら、動作させて確認してみましょう。PM plusで、図22のようにソースプログラムの|を+に書き換えてビルド→ディバグします。
SM+で、論理和の時と同様に実行してみましょう。結果は図23のようにちゃんと?8、つまり1000になります。
念のため演算内容を図24に示します。図20と比較して、論理和への理解を深めてください。
論理積(AND)もやってみよう
論理演算の最後は、論理積です。これも論理和のときと同様、以前の解説「たった5つのルール」に再度目を通しておくとわかりやすいです。
ではテスト・プログラムを作って動作させてみましょう。図25に論理積のテスト・プログラムを示します。
or.cとほとんど同じなので、or.cのP2 = P2|3;
(またはP2 = P2 + 3;
)の行をP2 = P2 & 3;
に変更して、[ファイル]メニューから「名前を付けて保存」を選んでand.cというファイル名で保存します。あとはこれまで同様、プロジェクトのソース・ファイルからor.cを削除してand.cを追加します。
今回のプログラムでは、5(=0101)と、3(=0011)の論理積を行います。演算結果は図26のように、
- 最下位ビットP20は1と1の論理積で1
- P21とP22は0と1(または1と0)の論理積で0
- 最上位ビットP23は0と0の論理積で0
となるはずです。
準備ができましたら、[ビルド]→[ディバグ]を行ってSM+で動作させます。ステップ実行で、P2への5の代入から3との論理積演算で図27のように表示が変化するのがわかります。
論理積演算の理解を深めるために、もう少しプログラムを追加して試してみましょう。図28にプログラムを示します。
P2に5を入れて3と論理積をするところまでが同じで、それ以降が追加プログラムです。P2が4の場合、6の場合、7の場合を試すようになっています。それぞれ論理積演算でろのような値になるか予想を立ててから、SM+で実行してみてください。
結果を見てみましょう。まずP2の値が5のときは図27の通りです。次にP2の値が4(0100)のとき、6(0110)のとき、7のとき(0111)は、それぞれ図29~図31のようになります。
もし余力があれば、7以上の値でもぜひ試してみてください。
図27、29、30、31を見比べて、なにか気づくことはないでしょうか。はい、演算結果の上位2ビット(P23とP22)は、必ず0になっていますね。そして下位2ビット(P21とP20)は、もとの値がそのまま保存されています。以前解説した「マスクをかける」という動作です。
情報を残したいビットだけを1にした値で論理積の演算を行うことで、不要な情報を消し去り、必要な情報だけを取り出すことができるわけです。このとき、マスクをかける値をマスク値といいます。今回の例ではマスク値は3(0011)でしたので、ビットが1になっている桁、つまり下位2桁分だけの情報が抽出される結果となっています。
少し長くなりましたが論理演算についての説明は以上です。だいぶんツールの使い方にも慣れてきたのではないかと思います。次回はループ制御と条件判断に進みます。それではまた。