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

無料レッスン

文字、画像、音をビットにする

このレッスンのあとで: 文字、画像、音がどのようにビットになるかを説明できる。

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

メッセージと写真と曲の大きさ

メッセージアプリで送る短い文は、数十バイトです。スマホで撮った写真は、数百万バイトあります。CD と同じ音質で記録した3分の曲は、約3200万バイトです。

どれも中身はビットだけです。このレッスンでは、それぞれがどうビットになるのか、そして大きさの計算のしかたを学びます。

このレッスンのゴール

メモ

文字、画像、音がどのようにビットになるかを説明できる。

キーワード

ことばいみれい
文字コード1つの文字を表す番号A は 65
Unicode世界中の文字に番号を付けた1つの表
画素画像を作る、色の付いた1つの点。ピクセルとも言う
色深度1画素に使うビットの数
サンプリング周波数1秒に音を何回測るか
量子化ビット数音を1回測った値に使うビットの数

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

始める前に

メモ

上のバーの Start the lab を押し、マシンが動き出すまで待ってください。Run ボタンは、順番にコマンドをマシンのターミナルに入力します。

文字にはそれぞれ番号がある

コンピュータは、文字を文字コードという番号で記録します。昔からある表では、A が65、B が66、a が97です。空白は32です。行の終わりも1つの文字で、番号は10です。

Unicode は、ひらがなや漢字、絵文字にも番号を付けています。よく使われる UTF-8 という書き方では、英字は1バイト、ひらがなや漢字はふつう3バイトです。

arch フォルダへ移る

コマンド
cd ~/arch

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

Python に文字コードを聞く

コマンド
python3 -c "print(ord('A'), ord('a'), chr(67))"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

「あ」のバイトを見る

コマンド
python3 -c "print(chr(12354), list(chr(12354).encode()))"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

OK と書いたファイルを作る

コマンド
echo OK > ok.txt

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

1バイトずつ数で表示する

コマンド
od -t u1 ok.txt

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

ファイルのバイト数を数える

コマンド
wc -c ok.txt

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

画像は画素のます目

画像は、画素のます目として記録されます。横の数と縦の数をかけると、画素の数になります。これを解像度と言います。

1つの画素は、色を表す数です。色深度が1ビットなら、白か黒だけです。8ビットなら256色です。スマホの写真は24ビットで、約1677万色を表せます。

例: 画像の大きさを計算する

画像画素の数1画素のビットビット数バイト数
3 × 3、白黒9191バイトと1ビット
200 × 100、256色20,0008160,00020,000
1280 × 720、フルカラー921,6002422,118,4002,764,800

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

9画素の画像を書く

コマンド
printf 'P1\n3 3\n0 1 0\n1 1 1\n0 1 0\n' > plus.pbm

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

どんなファイルか聞く

コマンド
file plus.pbm

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

画像を文字として読む

コマンド
cat plus.pbm

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

音は1秒に何万回も測る

マイクは音を波に変えます。コンピュータは、その波の高さを1秒に何万回も測ります。1回の測った値をサンプルと言います。

1秒のサンプルの数がサンプリング周波数で、1つのサンプルのビット数が量子化ビット数です。ビット数は、サンプリング周波数 × 量子化ビット数 × チャンネル数 × 秒数です。ステレオは2チャンネルです。

例: 動画の音声1分

手順式答え
1秒のサンプル48,00048,000
1秒のビット、16ビット、ステレオ48,000 × 16 × 21,536,000
60秒のビット1,536,000 × 6092,160,000
バイト92,160,000 ÷ 811,520,000

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

Python で計算する

コマンド
python3 -c "print(48000 * 16 * 2 * 60 / 8)"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

よくある間違い

注意

かけ算が終わったところで、答えをバイトだと思ってしまう人がよくいます。式の答えはビットです。8で割るとバイトになり、さらに1,000で割るとキロバイト、1,000,000で割るとメガバイトになります。

さらに挑戦: 画素より大きいファイル

plus.pbm の画素は9個なので、9ビットです。ターミナルで wc -c plus.pbm と打ち、ファイルの本当の大きさを見てください。

増えたバイトはどこから来たのでしょうか。もう一度 cat plus.pbm を見て、行の終わりも含めてすべての文字を数えてください。

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

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