この記事の対象者
- 「シフトえんざん」と聞いて泣いちゃった大人
- パソコンの中身がどうなってるか知りたいおともだち
- ぼく(5さい)にプログラミングで負けたくないパパとママ
はじめに
はじめまして!ぼくは5さいのエンジニアです。
さいきん、となりの席に座っている大人(30さい・ITエンジニア)が「 シフト演算 、まじでわからん……」と頭をかかえていたので、ぼくがレゴブロックを使っておしえてあげることにしました。
大人は「C言語」とか難しい言葉を使いたがりますが、じつはこれ、 「おもちゃのブロック」 を横にシャカシャカ動かすだけでわかる、ちょう簡単な仕組みなんだよ!
今日は難しい漢字はあんまり使わずに、 「シフトえんざん」 の魔法をかいせつします!🚀
1. パソコンくんは「九九」を暗記してない!?
大人はみんな「ににんがし(2×2=4)」「にさんがろく(2×3=6)」って、呪文みたいに「九九」を丸暗記してるよね。
でも、パソコンくんは「0」と「1」しか知らないから、九九の暗記ができません。
じゃあ、どうやって爆速で掛け算をしているの?
ここでパソコンくんが使うズルい技が 「シフトえんざん」 です。
2. ぼくのブロックでわかる「シフトえんざん」の魔法
大人にせつめいするために、ぼくのおもちゃの「ブロック」と「箱」をならべました。
ルールせつめい
- 横にズラッと「箱」がならんでいます。
- 右の箱から順番に「1の箱」「2の箱」「4の箱」「8の箱」とお名前がついています(ここだけ大人の 2進数 のルール)。
- 箱の中にブロックが1個入ると、その箱の数字になります。
[8の箱] [4の箱] [2の箱] [1の箱]
じっけん:数字の「2」を作ってみよう
「2の箱」にブロックを1つ入れます。
[ ] [ ] [ 🔴 ] [ ] ← いま「2」
魔法のはつどう:左に1つズラす!(左シフト)
ここで大人に言いました。
「このブロックを、左どなりの箱に1つズラしてみて!」 ```text
[ ] [ 🔴 ] [ ] [ ] ← 左に1つズラした!
ブロックは「4の箱」に移動しました。つまり、答えは **「4」** です。
さらにもう1つ左にズラしてみましょう。
```text
[ 🔴 ] [ ] [ ] [ ] ← さらに左に1つズラした!
ブロックは「8の箱」に移動しました。答えは 「8」 です。
3. これってつまり「九九の2の段」じゃない?
この動き、なんだか不思議だよね?
最初の「2」からスタートして、左にズラすたびに数字がどうなったか見てみよう。
- スタート:2
- 1回ズラす:4 (2の 2倍! )
- 2回ズラす:8 (4の 2倍! )
そうなんです!
「左に1つズラす」 っていうのは、 「2を掛ける(2倍にする)」 ことと全く同じなんだよ!
パソコンくんは「2を掛ける」という計算をするとき、真面目に足し算をするんじゃなくて、 「データを左にカシャッと1つズラすだけ」 で終わらせています。これが 「左シフトえんざん(<<)」 の正体です。
プログラムで書くとこんな感じ
// 大人がよくやる掛け算
let a = 2 * 2; // 答えは4
// ぼくたち(プロ)の書き方
let b = 2 << 1; // 「2を左に1つズラす(=2倍する)」答えは4!
4. 逆方向にズラすとどうなる?(右シフト)
ここまで読んだおともだちは、もう気づいたよね。
「じゃあ、右にズラしたらどうなるの?」
やってみましょう。「8」の状態からスタートして、右に1つズラします。
[ 🔴 ] [ ] [ ] [ ] ← いま「8」
↓ 右に1つズラす!
[ ] [ 🔴 ] [ ] [ ] ← 「4」になった!
- スタート:8
- 1回右にズラす:4 (8の半分!)
- 2回右にズラす:2 (4の半分!)
つまり、 「右に1つズラす」 ことは、 「2で割る(半分にする)」 ことと同じ(右シフトえんざん >>)なのです。
ぼくがビスケットを弟と半分こするのと同じだね!
まとめ
- 左に1つズラす(左シフト) = 2倍にする(×2) * 右に1つズラす(右シフト) = 半分にする(÷2) パソコンくんが計算を爆速でこなせるのは、掛け算や割り算を「横にブロックをズラすだけ」でサボっているからなんだね。
これを聞いたとなりの大人は「なるほど、パソコンくんは物理的にズラしてるだけなんか…ズルいな…」と言って、ぼくのレゴブロックで遊び始めました。仕事してほしいです。
もし、今後プログラミングで x << 1 というナゾの記号を見かけたら、「あ、こいつカッコつけて『2倍』って言ってるな」と心の中でニヤリとしてください。
最後まで読んでくれてありがとう!
参考になったら、LGTMと、おやつにタマゴボーロをください!✨