SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

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

たった5つのルール

変数と演算子


論理和

 論理和は、ひらたく言えば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が点灯してしまうような異常動作(不具合)が発生していまいます。

次のページ
次回は

この記事は参考になりましたか?

たった5つのルールではじめるC言語開発連載記事一覧

もっと読む

この記事の著者

舘 伸幸(タチ ノブユキ)

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/3724 2009/03/26 17:57

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー