クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

整数を2進数と16進数で表す

このレッスンのあとで: 整数を2進数と16進数で表すことができる。

45分のレッスンコマンド6件コンパイラとアーキテクチャのラボ:gcc、flex、bison、RISC-V を1台の VM で

なぜ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バイトで表す

けたの重み1286432168421
ビット11000000
足す値12864000000

学生が入力するセルは、このプレビューでは空白です。

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で割った答え余り
1151
521
210
101
下から上に読む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進数
192110000001100 は12、0000 は0C0
168101010001010 は10、1000 は8A8
255111111111111 は15、1111 は15FF

学生が入力するセルは、このプレビューでは空白です。

シェルで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 で確かめられます。どんな色になると思いますか。

このラボとソースについて: コンパイラとアーキテクチャのラボ:gcc、flex、bison、RISC-V を1台の VM で

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。