今年も師走になり、バタバタしているところですが、先日このMD-Blogでビットの話が出ていたので、それに便乗ではないですが、久々にビットの話をしたいと思います。
ちょっと算数から離れてしまう&プログラミングをしている人には基本的なこと!と突っ込まれるとこかもですがご容赦くださいませ。
ビットとはその「0か1か」というのが最小単位で、1ビットです。
と先日触れてもらっているので割愛するとして、ビット演算とはその1ビットに対する演算です。
はい。よくわからないと思います。笑
今回紹介するビット演算は、
だけです。
プログラミングする人は、&を使っている人もいると思います。
二つの2進数の数字を比較して、AND演算は、
どちらも「1」であれば「1」になります。
簡単ですね。
さてこれを何に使うの?となると思うので、日常シーンを例に試してみたいと思います。
今回はよくある買い物を例にしたいと思います。
買い物で買いたいものに、それぞれ数字を割り振ります。
この数字を単純に1ずつ増やすのではなく、2進数の桁ごとに割り振ります。
ヨーグルト風チキンカレーの材料を例にします。
買いたいもの全て足すと、
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制作の中では、ローディングやフィルタリングに知らない間に使っていることも多いかもしれませんが基本を押さえることにより自分流のカスタマイズや設計に役立つと思います。
算数に興味のない人も、こういうことに使えるんだ。と知ってもらえれば幸いです。
今回は算数と呼んでいいのかわかりませんが。笑