CodeZine(コードジン)

特集ページ一覧

たった5つのルール

変数と演算子

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/08/25 18:30

目次

論理積

 今回のマジカルボックスでは直接は使用していないのですが、論理和とペアで覚えておきましょう。こんどは2進数でのかけ算です。

1)  0×0=
2)  0×1=
3)  1×0=
4)  1×1=

 普通の計算では、1)から3)までは0、4)だけが1ですね。論理積でも同じです。論理積は英語ではANDと表現されます。さきのORが「演算する値のどちらかが1であれば結果は1」であったのに対し、論理積は「演算する値が両方とも1(1かつ(AND)1)のときだけ1」になります。

 普通のかけ算と論理積は、複数桁の演算をすると顕著に違いがわかります。たとえば

0011×0010=

 は、いくつになるでしょうか。十進数では3×2ですから、通常の計算では答は6、つまり0110です。論理積では、それぞれ桁ごとに計算をします。すると図6のようになります。

図6:4桁の2進数の論理積計算例
図6:4桁の2進数の論理積計算例

 ということで、答は0010(2)です。

 論理和(OR)では、任意のビットを1にするのに利用すると述べましたが、論理積(AND)はその逆で、任意のビットを0にするのに使用します。

 再度図5を例に説明します。いま、いくつかのLEDが点灯しているとします。この中でD7だけ消灯させたい、つまりb7だけを0にしたい場合、b7の位置だけ0の値とAND演算することで実現できるのです。C言語では論理積は演算子に&を以下のように書きます。

Px = Px & 127 ;     /* 127 は 0111 1111  */

 演算する値の桁が1の部分、つまりb6~b0は、Pxの各ビットがもともと0であれば0&1=0で変化しません。もともと1であった場合も、1&1=1で変化しません。演算する値の桁が0の部分、つまりb7だけが、元の値が1であろうと0であろうと、0との論理積となって必ず0になるわけです。

マスク

 組込みソフトでは、このように論理積演算を使って特定の桁だけ情報を保存して、それ以外をクリアする行為を「マスクをかける」と言います。説明した例のようなハードウェア制御に限らず、たとえば8で割った余りを求めたいとき(タブを含んだカーソル位置を求める処理などでよく登場します)、変数&7というふうに、対象変数の下位3ビットだけを「マスク」して取りだしてやることで、きわめてシンプルに実現することができます。

次回は

 変数と演算子の説明は以上です。今回は演習作業なしでしたので、少々退屈でしたでしょうか。次回は、シミュレータを使って、今回の動作を目で見て確かめてみます。それではまた。



  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:たった5つのルールではじめるC言語開発

もっと読む

著者プロフィール

  • 舘 伸幸(タチ ノブユキ)

    NECマイクロシステム株式会社 勤務 NPO法人SESSAME 所属 開発ツールのソフトウェア開発を経て組込みソフトウェア開発に従事。プライベートにも半田ごては手放さない。 2006年からSESSAME に参加。若い世代に物を作る楽しさを伝えていきたい。

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5