CodeZine(コードジン)

特集ページ一覧

たった5つのルール

変数と演算子

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

目次

論理和

 論理和は、ひらたく言えば2進数での足し算です。ただし、普通の足し算とちょっとだけ違うところがあります。小学一年生にもどって(?)、次の問題を解いてみてください。

1)  0+0=
2)  0+1=
3)  1+0=
4)  1+1=

 1)は、もちろん0ですね。2)と3)は1です。では4)は? 2と答えた方、残念、これは2進数なので1か0しかありません。10と答えた方。惜しいです!

 確かに普通の足し算では1+1は10です。しかし、論理和では1+1は1になります。実は論理和は英語ではORと表現されます。つまり、演算する2つの項のどちらか一方が1であれば、1というわけです。

 上記の問題を、以下のように書き直すと納得しやすいでしょうか。

1)  0 or 0=
2)  0 or 1=
3)  1 or 0=
4)  1 or 1=

 この演算は、実際のプログラムでは、主に特定のビットを1にしたいときに使います。たとえば図5のように、ある8ビットのポートPxに8個のLEDがつながっているとします。LEDは対応するビットが1になると光るよう回路設計されています。このとき、D3だけを点灯させたいときはどうすればいいでしょうか。

図5:ポートにLEDが接続されている例
図5:ポートにLEDが接続されている例

 この場合、Pxのビット3(b3)を1にすればいいので、以下のようにすればOKです。

Px = 8;      /* 8 は 0000 1000  */

 しかし、すでに他のいくつかのLEDが点灯していたとしたらどうでしょう。たとえばD0が点灯していたとすると、上のプログラムを実行した瞬間に、Pxのビット0(b0)は0になってしまうので、消灯してしまうことになります。こんなときに論理和が役立ちます。C言語では、論理和は演算子に「|」を使って以下のように書きます。

Px = Px | 8 ;     /* 8 は 0000 1000  */

 これで、もともとのPxの値は保ったまま、b3だけを1にすることができます。もし、b3がもともと1であったとしても、1or 1 = 1ですから、なにも問題は起こりません。もしこれを普通の足し算を使って

Px = Px + 8 ;

 と書くと、b3が0のときは正常動作しますが、b3が1の場合b4に桁上がりしてD4が点灯してしまうような異常動作(不具合)が発生していまいます。


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

バックナンバー

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

もっと読む

著者プロフィール

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

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

あなたにオススメ

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