なぜ255までなのか
スマホの Wi-Fi の詳しい設定を開くと、192.168.0.15 のような IP アドレスが出てきます。点で区切られた4つの数は、どれも0から255のどれかです。256 や 300 はありません。
この 255 という数は、ゲームの最大レベルや画像の色にもよく出てきます。今日のレッスンで、その理由がわかります。
このレッスンのゴール
メモ
整数を2進数と16進数で表すことができる。
キーワード
| ことば | いみ | れい |
|---|---|---|
| ビット | 0か1の、1けたの値 | |
| バイト | 8ビットのまとまり | |
| 10進数 | 0から9の10個の数字で数える、ふだんの書き方 | |
| 2進数 | 0と1だけで数を書く方法 | 11000000 |
| けたの重み | その位置にある数字が表す大きさ | |
| 16進数 | 0から9とAからFで、16ずつ数える書き方 | C0 |
学生が入力するセルは、このプレビューでは空白です。
始める前に
メモ
上のバーの Start the lab を押してください。ラボは自分専用の Ubuntu マシンなので、起動に1分ほどかかります。Run ボタンを押すと、そのコマンドがマシンのターミナルに入力されます。まだ起動中と出たら、少し待ってもう一度押してください。
2進数は0と1だけで書く
コンピュータの中では、数はオンかオフのスイッチの並びで記録されます。オフを0、オンを1と書きます。
10進数では、1けた左に行くと重みが10倍になります。2進数では、1けた左に行くと2倍です。1バイトの8けたの重みは、左から 128、64、32、16、8、4、2、1 です。1があるけたの重みを足すと、その数になります。
例: 192を1バイトで表す
| けたの重み | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
|---|---|---|---|---|---|---|---|---|
| ビット | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| 足す値 | 128 | 64 | 0 | 0 | 0 | 0 | 0 | 0 |
学生が入力するセルは、このプレビューでは空白です。
arch フォルダへ移る
cd ~/archここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
Python で192を2進数にする
python3 -c "print(bin(192))"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
ビットを10進数にもどす
python3 -c "print(int('11000000', 2))"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
2で割り続けると2進数になる
10進数を2進数にするには、数を2で割って、余りを書きとめます。その答えをまた2で割ります。答えが0になるまで続けます。
書きとめた余りがビットです。最後の余りから最初の余りへ、下から上に読みます。
例: 11を2で割り続ける
| 数 | 2で割った答え | 余り |
|---|---|---|
| 11 | 5 | 1 |
| 5 | 2 | 1 |
| 2 | 1 | 0 |
| 1 | 0 | 1 |
| 下から上に読む | 1011 |
学生が入力するセルは、このプレビューでは空白です。
シェルも2進数を読める
echo $((2#1011))ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
よくある間違い
注意
2進数を左から読んで、最初のビットの重みを1だと考える人がよくいます。重みが1なのは、いちばん右のビットです。左に1けた進むたびに、重みは2倍になります。だから 1000 は8で、0001 は1です。
16進数は2進数を短く書く方法
長いビットの並びは読みにくいです。16進数は16ずつ数えます。0から9のあと、10から15をAからFで書きます。
16進数の1けたは、ちょうど4ビットです。だから1バイトは、いつも16進数2けたになります。8ビットを4ビットずつ半分に分け、それぞれを1けたにします。
例: 1バイトを16進数で書く
| 10進数 | 2進数 | 半分ずつ | 16進数 |
|---|---|---|---|
| 192 | 11000000 | 1100 は12、0000 は0 | C0 |
| 168 | 10101000 | 1010 は10、1000 は8 | A8 |
| 255 | 11111111 | 1111 は15、1111 は15 | FF |
学生が入力するセルは、このプレビューでは空白です。
シェルで192を16進数にする
printf '%x\n' 192ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
Python でさらに2つ変換する
python3 -c "print(hex(168), hex(4096))"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
さらに挑戦: 色を16進数で読む
Web ページでは、色を #3399FF のように16進数6けたで書くことがよくあります。最初の2けたが赤、次の2けたが緑、最後の2けたが青の強さです。
3つの組を、手で10進数に直してみましょう。答えは課題の to_hex で確かめられます。どんな色になると思いますか。