本文へジャンプ

算数ドリル ... ビット演算で買い忘れを防ごう

Posted by namio.araki

算数ドリル ... ビット演算で買い忘れを防ごう

頭の体操

今年も師走になり、バタバタしているところですが、先日このMD-Blogでビットの話が出ていたので、それに便乗ではないですが、久々にビットの話をしたいと思います。

ちょっと算数から離れてしまう&プログラミングをしている人には基本的なこと!と突っ込まれるとこかもですがご容赦くださいませ。

ビット演算とは?

ビットとはその「0か1か」というのが最小単位で、1ビットです。
と先日触れてもらっているので割愛するとして、ビット演算とはその1ビットに対する演算です。

はい。よくわからないと思います。笑

今回紹介するビット演算は、

  • AND

だけです。
プログラミングする人は、を使っている人もいると思います。

二つの2進数の数字を比較して、AND演算は、
どちらも「1」であれば「1」になります。

  • 「0」と「0」をAND演算すると「0」
  • 「1」と「0」をAND演算すると「0」
  • 「0」と「1」をAND演算すると「0」
  • 「1」と「1」をAND演算すると「1」

簡単ですね。

さてこれを何に使うの?となると思うので、日常シーンを例に試してみたいと思います。

お題

今回はよくある買い物を例にしたいと思います。

買い物で買いたいものに、それぞれ数字を割り振ります。
この数字を単純に1ずつ増やすのではなく、2進数の桁ごとに割り振ります。

ヨーグルト風チキンカレーの材料を例にします。

  • 鶏もも肉:1(2進数 1)
  • 玉ねぎ:2(2進数 10)
  • にんにく:4(2進数 100)
  • ヨーグルト:8(2進数 1000)
  • ガラムマサラ:16(2進数 10000)
  • レッドペッパー:32(2進数 100000)
  • ターメリック:64(2進数 1000000)
  • コリアンダー:128(2進数 10000000)

買いたいもの全て足すと、

1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 = 255

となります。

また最初は何も買っていないので0となります。
一品買うとその数字を足していくことになります。
買い物をしていき、合計が255になれば買い物は終了です。

10進数で単純に足していくだけだと、

  • 同じものを買っていないか?
  • まだ買っていないものは何か?

などを把握することができません。
ビット演算を使えば、簡単にそれがわかります!

解説

例えば、最初に八百屋さんに入って玉ねぎ、にんにくを買うとしましょうか。

玉ねぎは2(2進数 10)、にんにくは4(2進数 100)なので、最初の0からそれぞれ足して買ったものは6(2進数 110)になります。

買ったものかどうかチェック

すでに買ったかどうかのチェックは、買いたいものと買ったものをAND演算すればわかります。
例えば、鶏もも肉1(2進数 1)であれば、

1 & 6

AND演算はどちらも1のときだけ「1」になるので、2進数で計算すると

001 & 110 = 000

となります。
全ての桁が「0」になるので
まだ買ってません!

同様に玉ねぎ2(2進数 10)で試してみると、

010 & 110 = 010

となり、
「0」ではない桁があるので
既に買っている!
となります。


どうでしょうか。
Web制作の中では、ローディングやフィルタリングに知らない間に使っていることも多いかもしれませんが基本を押さえることにより自分流のカスタマイズや設計に役立つと思います。

算数に興味のない人も、こういうことに使えるんだ。と知ってもらえれば幸いです。
今回は算数と呼んでいいのかわかりませんが。笑

おまけ

ヨーグルト風チキンカレーの作り方

  1. ヨーグルトにレッドペッパー、ターメリック、塩を混ぜ、鶏もも肉にまぶしつけておく(出来れば前日から)。
  2. 鍋に油を熱して玉ねぎを茶色になるまで炒める。
  3. 鶏もも肉、にんにく、水を入れる。
  4. 水分がなくなるまで煮込む(1時間から2時間)。
  5. ガラムマサラを入れて蒸らす。
  6. コリアンダーの葉をきざんでかける。
  7. ターメリックライスやナンと一緒に残さず食べましょう。

算数ドリルシリーズ

Recent Entries
MD EVENT REPORT
What's Hot?