CodeZine(コードジン)

特集ページ一覧

たった5つのルール

変数と演算子

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

目次

組込みでは論理演算をよく使う

論理演算子(シフト、論理和、論理積)

 プログラミングの経験の浅い方や、OA処理など組込みでないソフトウェアに携わっておられた方にはなじみのない演算です。しかし組込みソフト、特にハードウェアを制御する部分を作るときには、ほぼ必須として使用するのがこの論理演算子です。そのようなこともあり、今回のマジカルボックスでも敢えて使用しています。

シフト演算子

 図2は、8ビットの変数(char型)の中身を2進数で表現したものです。8桁の1または0の列でできています。

図2:変数の2進数表現
図2:変数の2進数表現

 たとえば、10進数で「5」は、2進数では00000101です。つまり、C言語で

char  temp;
      temp = 5;

 と記述すると、このプログラムが実行されたとき、変数tempの中身は00000101という値になっているわけです。

 シフト演算子は、この2進数の1と0でできた列を右に左にずらすときに使います。たとえば、00000101(十進数で5)を左にひとつシフトさせると、図3のようになって、00001010(十進数で10)になります。

図3:シフト演算の動作
図3:シフト演算の動作

 さらに、もう一度左に1つシフトすると、図4のようになります。

図4:シフト演算の動作(2回目)
図4:シフト演算の動作(2回目)

 今度は値が00010100、つまり十進数で20になりました。

 なにか気づかれましたか?左に1つするごとに、変数の値は5→10→20と変わっています。つまり、左に1つシフトすることは、値を2倍するのと同じです。もう少し一般的な表現をすると、左にNだけシフトすると、元の値は2のN乗倍されるわけです。逆に、右にシフトをすると元の値は2のN乗分の1になります。

 さてC言語では、シフト演算をするときは以下のような演算子を使います。

シフト演算子
変数 << シフト量; 左にシフト量だけシフト
変数 >> シフト量; 右にシフト量だけシフト
temp = temp << 2;     変数tempの値を2つ左にシフトする

 大小比較の演算子と似ているので、間違えないように注意しましょう。シフト演算自体は、それほど多用するものではありません。ですが、上記のような2進数での数値表現や演算に慣れておくことは、組込みソフトウェアに付き合っていく上でとても大切です。

プチ解説:どうしてコンピュータは2進数?

 それはひとえに、回路が簡単になるからです。

 たとえば、8Vと5Vを電圧値として認識するのは大変困難です。一方で、単に電気が来てるか来てないかだけであれば、これを判定するのは容易です(実際は電圧の高低で1か0かを決めている)。

 人間が調べる場合で想像してみてください。「コンセントは何ボルトですか」と聞かれれば、回路テスターや電圧計で計測しなければなりません。でも、通電してるかどうかどうかだけであれば、電灯をつないでみれば一目瞭然です。


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

バックナンバー

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

もっと読む

著者プロフィール

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

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

あなたにオススメ

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