SHOEISHA iD

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

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

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

たった5つのルール

変数と演算子


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

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

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

 プログラミングの経験の浅い方や、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かを決めている)。

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

次のページ

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

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

もっと読む

この記事の著者

舘 伸幸(タチ ノブユキ)

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

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

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

この記事をシェア

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング