CodeArc FE 学習アドベンチャー

今回予告

通信塔の13番信号が止まる

赤い警告、読めない13。ナナは0と1だけで開く入口へ向かう。

入口ゲートが止まりました。13番信号が読めません

赤い警告

基礎理論 / 物語

第1話 13番ゲートの沈黙

FE模試に失敗したナナは本試験まで30日、M-07の13番信号を理由ごと救うため13番ゲートへ来た。ビットの街の入口には、古い通信塔が立っていた。塔の表面には小さなランプが無数に並び、普段なら街に入るすべての信号を0と1の光に変えて送り出している。だが、その日は違った。塔の中央には赤い警告が浮かんでいた。

目標

この話でできるようになること

12進数の重みを説明できる

210進数を2進数へ変換できる

32進数の重みを右から書ける

410進数13を2進数1101に変換できる

5変換後に10進数へ戻して検算できる

6誤答がなぜ違うか説明できる

場面ログ 会話で進んだ場面を確認する
場面 1

ビットの街の入口には、古い通信塔が立っていた。塔の表面には小さなランプが無数に並び…

ビットの街の入口には、古い通信塔が立っていた。塔の表面には小さなランプが無数に並び、普段なら街に入るすべての信号を0と1の光に変えて送り出している。だが、その日は違った。塔の中央には赤い警告が浮かんでいた。

Gate 13:信号変換不能

Bitは小さなアンテナを震わせながら、ナナの前に飛び出してきた。

「入口ゲートが止まりました。13番信号が読めません」

ナナは首をかしげた。

「13って、13でしょ? そのまま送ればいいんじゃないの?」

Bitは困ったように通信ランプを点滅させた。

「人間には13と読めます。でも、この街の回路は0と1しか読みません。13を、回路が読める形に変えないといけません」

ナナがゲートの前に近づくと、5つのランプが横に並んでいた。

16   8   4   2   1
□    □   □   □   □

「これ、何?」

「桁の重みです。2進数では、右から1、2、4、8、16……と重みが増えます。13を作るには、必要な重みのランプだけを点けます」

ナナは最初、13に近そうな16のランプを押そうとした。その瞬間、塔の奥から低い声が響いた。

> 考えるな。大きい数字を押せ。早く選べ。

ナナの指が止まる。アイリが背後から現れ、黒いジャケットの袖を払った。

「それはノイズ。焦らせる声には従わない。数字は分解して読む」

アイリは空中に式を書いた。

13 = 8 + 4 + 1

ナナは16のランプを見た。

「13に16は入らない。だから16は0」

次に8を見る。

「13に8は入る。残りは5。だから8は1」

次に4。

「5に4は入る。残りは1。だから4は1」

次に2。

「1に2は入らない。だから2は0」

最後に1。

「1に1は入る。残り0。だから1は1」

ランプはこうなった。

16   8   4   2   1
0    1   1   0   1

Bitが叫ぶ。

「01101。先頭の0を省けば、1101です」

ナナはゲートに入力した。

13₁₀ = 1101₂

通信塔の赤い警告が青に変わる。しかし、ゲートは完全には開かなかった。塔の下部から古いログが浮かび上がった。

過去ログ:
「2進数が分からない」
「どこから読めばいいのか分からない」
「解説を見ても、なぜ1101になるのか分からない」

ナナは胸の奥が少し重くなった。

「これ、誰のログ?」

Bitは答えなかった。アイリも、一瞬だけ目を伏せた。

「今は進もう。だけど覚えておいて。分からなかった人の記録は、ここに残っている」

ゲートが音を立てて開いた。ナナはノートに書いた。

数字は、重みに分ければ読める。
焦ったら、右から 1,2,4,8。

その文字が光った瞬間、通信塔の一部が復旧した。だが塔の影には、まだ黒いノイズが残っていた。

本文入口ゲートが止まりました。13番信号が読めません

本文13って、13でしょ? そのまま送ればいいんじゃないの?

本文人間には13と読めます。でも、この街の回路は0と1しか読みません。13を、回路が読める形に変えないといけません

Narrator

赤い警告が入口を塞ぐ

通信塔の中央には、赤い警告が浮かんでいる。Gate 13 は止まり、街の回路は「13」という人間の数字をまだ読めない。

Narrator

重みランプが床に並ぶ

ゲート前の床に、16、8、4、2、1 の重みランプが並ぶ。13を作るには、必要な重みだけを点けなければならない。

Narrator

1101がゲートを青く変える

ナナは16を消し、8、4、1を点ける。ランプは 0 1 1 0 1 を示し、先頭の0を省いた 1101 が13番信号の形になる。

解法の要点

本当に必要な手順、例題、誤答の直し方だけ確認する

導入

学習導入

この話で学ぶのは、10進数を2進数に変換する方法です。 初学者は2進数を「0と1の暗号」のように見てしまうが、実際は各桁の重みを使って数を表す方法です。

10進数では右から 1,10,100,1000... と重みが増える。 2進数では右から 1,2,4,8,16... と重みが増える。

解法

解き方の手順

2進数とは、0と1だけで数を表す方法です。 2進数では1の次に桁上がりして 10₂ になる。ここで注意すべきなのは、10₂ は10進数の10ではなく、10進数の2であることです。

10₂ = 1×2 + 0×1 = 2₁₀

10進数を2進数へ変換するには、目標値を2の重みの足し算で作ります。13なら、

13 = 8 + 4 + 1

これを重み表に置く。

8 4 2 1
1 1 0 1

よって、

13₁₀ = 1101₂

先頭に0が付いて 01101₂ となっても、通常の基数変換では値は変わらない。ただし固定長bitでは先頭の0にも意味が出るため、第2章で改めて扱う。

手順

解法手順

  • 目標の10進数を書く
  • その数以下で使えそうな2の重みを書く
  • 大きい重みから順に見る
  • その重みが残りの数以下なら1を書く
  • その重みを残りから引く
  • 入らないなら0を書く
例題

例題

問題

10進数 13 を2進数で表したものはどれか。

選択肢
1011₂
1101₂
1110₂
1001₂

解説

13 = 8 + 4 + 1
8 4 2 1
1 1 0 1

したがって 1101₂

答え

検算

1101₂ = 8 + 4 + 1 = 13

なぜ他の選択肢が違うか

選択肢10進数に戻す不正解理由
1011₂114の桁が不足
1101₂13正しい
1110₂142の桁が余分
1001₂94の桁が不足

答え: イ

修復

誤答パターン

  • 左から1,2,4,8と読んでしまう
  • 重みは必ず右から書く。
  • 大きすぎる重みを使う
  • 13を作るのに16は使えない。目標値を超える。
  • 残りを引かずに進める
  • 13-8=5, 5-4=1 のように残りを書く。
Exam

過去問接続

科目Aで直接効きます。典型的には「10進数を2進数で表したものはどれか」「あるbit列が表す値はどれか」と問われます。 科目Bにも、表を書いて値を追う習慣として間接的に効きます。

図で確認

試験中に自分で再現できる形へ落とし込む

binary

重みランプ

使う重みをONにして、ONの合計が目標値になるか確認します。

16 OFF 8 ON 4 ON 2 OFF 1 ON

目標値 13 = 8 + 4 + 1 / 01101

例題の答え

手を動かす

読み終える前に、短い演習で理解を固定する

演習 1

進数で使える数字は何か。

  1. 問題文の条件を写す
  2. 図・表・重み・真理値のどれで読むか決める
  3. 答えを戻して検算する
演習 2

進数の重みは右から何、何、何、何か。

  1. 問題文の条件を写す
  2. 図・表・重み・真理値のどれで読むか決める
  3. 答えを戻して検算する
演習 3

`10₂` は10進数でいくつか。

  1. 問題文の条件を写す
  2. 図・表・重み・真理値のどれで読むか決める
  3. 答えを戻して検算する
演習 4

先頭の0は普通の基数変換では値を変えるか。

  1. 問題文の条件を写す
  2. 図・表・重み・真理値のどれで読むか決める
  3. 答えを戻して検算する

旅のメモ

次に残すメモ

12進数の重みを右から書ける

210進数13を2進数1101に変換できる

3変換後に10進数へ戻して検算できる

科目Aで直接効きます。典型的には「10進数を2進数で表したものはどれか」「あるbit列が表す値はどれか」と問われます。 科目Bにも、表を書いて値を追う習慣として間接的に効きます。

確認

この話で持ち帰ること

12進数の重みを右から書ける

210進数13を2進数1101に変換できる

3変換後に10進数へ戻して検算できる

4誤答がなぜ違うか説明できる