SHOEISHA iD

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

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

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

論理演算の様子を観察

LED表示でシフト演算の動作を見る


  • X ポスト
  • このエントリーをはてなブックマークに追加

普通の加算演算と比べてみよう

 ではここでちょっとクイズです。さきほどの例、論理和でなく普通の足し算ならどうなるでしょうか。5+3だから8!と暗算せずに、いちど2進数で紙に書いて計算してみてください。考察したら、動作させて確認してみましょう。PM plusで、図22のようにソースプログラムの|を+に書き換えてビルド→ディバグします。

図22:通常の加算演算にしてみる
図22:通常の加算演算にしてみる

 SM+で、論理和の時と同様に実行してみましょう。結果は図23のようにちゃんと?8、つまり1000になります。

図23:普通の加算演算の実行結果
図23:普通の加算演算の実行結果

 念のため演算内容を図24に示します。図20と比較して、論理和への理解を深めてください。

図24:普通の加算演算
図24:普通の加算演算

論理積(AND)もやってみよう

 論理演算の最後は、論理積です。これも論理和のときと同様、以前の解説「たった5つのルール」に再度目を通しておくとわかりやすいです。

 ではテスト・プログラムを作って動作させてみましょう。図25に論理積のテスト・プログラムを示します。

図25:論理積のテスト・プログラムとプロジェクト
図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

 となるはずです。

図26:5(0101)と3(0011)の論理積
図26:5(0101)と3(0011)の論理積

 準備ができましたら、[ビルド]→[ディバグ]を行ってSM+で動作させます。ステップ実行で、P2への5の代入から3との論理積演算で図27のように表示が変化するのがわかります。

図27:論理積演算の結果
図27:論理積演算の結果

 論理積演算の理解を深めるために、もう少しプログラムを追加して試してみましょう。図28にプログラムを示します。

図28:論理積のテスト・プログラム その2
図28:論理積のテスト・プログラム その2

 P2に5を入れて3と論理積をするところまでが同じで、それ以降が追加プログラムです。P2が4の場合、6の場合、7の場合を試すようになっています。それぞれ論理積演算でろのような値になるか予想を立ててから、SM+で実行してみてください。

 結果を見てみましょう。まずP2の値が5のときは図27の通りです。次にP2の値が4(0100)のとき、6(0110)のとき、7のとき(0111)は、それぞれ図29~図31のようになります。

図29:P2の値が4(0100)のとき
図29:P2の値が4(0100)のとき
図30:P2の値が6(0110)のとき
図30:P2の値が6(0110)のとき
図31:P2の値が7(0111)のとき
図31:P2の値が7(0111)のとき

 もし余力があれば、7以上の値でもぜひ試してみてください。

 図27、29、30、31を見比べて、なにか気づくことはないでしょうか。はい、演算結果の上位2ビット(P23とP22)は、必ず0になっていますね。そして下位2ビット(P21とP20)は、もとの値がそのまま保存されています。以前解説した「マスクをかける」という動作です。

 情報を残したいビットだけを1にした値で論理積の演算を行うことで、不要な情報を消し去り、必要な情報だけを取り出すことができるわけです。このとき、マスクをかける値をマスク値といいます。今回の例ではマスク値は3(0011)でしたので、ビットが1になっている桁、つまり下位2桁分だけの情報が抽出される結果となっています。

 少し長くなりましたが論理演算についての説明は以上です。だいぶんツールの使い方にも慣れてきたのではないかと思います。次回はループ制御と条件判断に進みます。それではまた。

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
たった5つのルールではじめるC言語開発連載記事一覧

もっと読む

この記事の著者

舘 伸幸(タチ ノブユキ)

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

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3727 2009/03/26 18:01

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング