0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【5歳未経験でも理解できた】九九とシフト演算

0
Posted at

この記事の対象者

  • 「シフトえんざん」と聞いて泣いちゃった大人
  • パソコンの中身がどうなってるか知りたいおともだち
  • ぼく(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と、おやつにタマゴボーロをください!✨

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?