冬期講習 2026-2027、募集中。総復習は売りません。90分×完全1対1で、穴だけを塞ぎます 詳しく →
電話 0422-27-7828チャットで質問無料相談を予約

武蔵野個別指導塾の特徴

高校情報I 文字のデジタル表現—文字コードと文字数からデータ量の条件を読む|武蔵野個別指導塾

学習のイメージ写真 武蔵野個別指導塾
X LINE Facebook

自作の符号表で文字列を読み直し、固定長の条件からバイト数を求めながら、文字化けの原因を文字コードから考えます。

よくあるのは、文字数とバイト数がいつも同じだと考え、答案の数字をそのまま写してしまう場面です。画面に見える文字の個数と、保存に使うデータの量は別のものです。1文字に何ビットを割り当てるかが問題の条件によって変われば、同じ文字数でも量は変わります。範囲表と授業ノートを照らし、文字と符号の対応、文字化け、量の計算のうち、今回必要な部分から確かめていきましょう。

問題文のどこに目を置くか

出方の1つ目は、文字とビット列の対応表を使い、文字列を符号に直したり、符号を文字列に戻したりする型です。表に載った対応を順番に使います。実在する文字コードの値を覚えているかではなく、その問題で与えられた約束を使えるかが問われます。

2つ目は、固定長の符号で表した文字列の量を求める型です。文字数に1文字あたりのビット数を掛け、必要なら問題で定められたビットとバイトの関係で換算します。空白や記号を数えるか、付加情報を含むかにも注意が必要です。

3つ目は、読み取る側の約束が違うときの表示を考える型です。同じビット列でも対応表が違えば、違う文字に変わることがあります。この現象を文字化けと結びつけるには、どの表で書き、どの表で読むかを区別します。計算だけが合っていても、読み取る順序や単位が違えば正しい解答にはなりません。

文字と符号を結ぶ約束

コンピュータでは文字を、そのまま紙の上の形として記録するのではなく、定められた対応に従う符号として表します。文字と符号の対応を定める仕組みが文字コードです。文字を符号に変えることを符号化、符号から文字を読み取ることを復号と呼びます。ここでは学習用に作った小さな表を使い、実際の規格の割当値は扱いません。

図1のように、書く側が「ア」に対応する符号を送り、読む側が同じ対応表を使えば「ア」に戻せます。表が逆向きに使われていることが大切です。符号化では文字から列へ進み、復号では列から文字へ戻ります。途中のビット列を読まずに最初と最後の文字だけを比べると、どこでずれたかを特定できません。

図1 文字と符号を対応表で往復する関係

図1の表は「ア」を 00、「イ」を 01 に対応させています。これは説明のための約束です。2ビットの列は 00、01、10、11 の4通りあるので、この表にさらに2種類を重複なく割り当てる余地があります。ただし、空いている列を何の文字に使うかは、問題が指定しない限り決まりません。

固定長とは、この表で扱う各文字の符号の長さを同じにすることです。たとえば各文字を2ビットと決めれば、文字の種類が変わっても、1文字に使うビット数は2のままです。これに対して、現実の文字の表し方には文字によって使うバイト数が変わるものもあります。文字数とバイト数が常に一致すると考えず、必ず条件を読みます。

ここからの計算では、問題ごとに指定がなければ 1バイトを8ビットとします。ビット列そのものの長さを考え、保存のための追加情報や圧縮、端数を埋める処理は含めません。問題が別の条件を示したら、その条件を優先します。ビット数が8の倍数でない場合、余分なビットをどう保存するかが指定されていなければ、実際の保存領域のバイト数を整数として決められません。

表から文字列と量を求める

基本例題です。学習用の固定長符号表で、アを 00、イを 01、ウを 10、エを 11 とします。各文字は2ビットです。「アイウエ」をこの順に符号化し、区切りのないビット列とデータ量をビットとバイトで求めてください。1バイトは8ビットで、付加情報や圧縮はなく、余分なビットも加えません。

図2のように、まず文字ごとに表を引き、その後で順につなぎます。文字列の順序を変えず、各符号の長さを確認してから連結するのが要点です。

図2 四文字を二ビットずつ符号に直す手順

1行ずつたどると次のようになります。

  1. アに対応する列は 00 です。
  2. イに対応する列は 01 です。
  3. ウに対応する列は 10 です。
  4. エに対応する列は 11 です。
  5. 左からつなぐと 00011011 です。
  6. 4文字に各2ビットを使うため、4 × 2 で8ビットです。
  7. 8ビットを8ビットずつのバイトに直すと、1バイトです。

確認では、できた列を左から2ビットずつ区切ります。00、01、10、11 を同じ表で読み戻すと、元の「アイウエ」になります。さらに、2ビットずつ4組なので、列の長さも8ビットです。文字の順序と量の両方が元の条件に合っています。途中に空白を入れて表した 00 01 10 11 は読みやすくするための区切りで、実際の符号列に空白の符号を加えるという意味ではありません。

この例では4文字が1バイトですが、4文字なら常に1バイトという意味ではありません。各文字が2ビットという条件を使った結果です。別の表で1文字が8ビットなら、同じ4文字でも32ビット、すなわち4バイトになります。見かけの文字数だけでなく、1文字あたりの長さを答えの根拠として書きましょう。

読む表と付加情報が変わる場合

少し難しい例題です。送信側は、カを 00、キを 01、クを 10、ケを 11 とする表Aで「カキクケ」を符号化します。受信側は、サを 00、シを 01、スを 10、セを 11 とする表Bで同じ列を読みます。列が途中で変化しないとして、受信側の表示を答えてください。また、送信側では本文の列に、本文以外の情報として8ビットを加えます。圧縮せず、1バイトを8ビットとすると、合計は何バイトですか。

送信側の表Aで符号化すると、カ、キ、ク、ケは順に 00、01、10、11 です。つないだ列は 00011011 になります。受信側は同じ列を2ビットずつに分け、表Bを使います。00 はサ、01 はシ、10 はス、11 はセですから、表示は「サシスセ」です。列が届いていても表の対応が異なるため、送り手が意図した文字には戻りません。

量は表示の文字を数え直すのではなく、送信側の条件から計算します。本文は4文字で各2ビットですから8ビットです。本文以外の8ビットを加えると16ビットになり、合計は2バイトです。逆に2バイトは16ビットであり、そのうち8ビットを付加情報に割けば、残り8ビットが2ビットの文字4個分になると確かめられます。

ここでの表示は、問題が表Aと表Bを明示したために決まります。実際の文字化けでは、読み取り方の不一致のほかにも、データが途中で壊れる場合などがあります。「文字化けが見えたから必ずこの表に変換された」と決めつけることはできません。また、同じ対応表でも、その表にない符号や長さの足りない列が与えられれば、この表だけでは文字を決められません。欠けた部分を推測して補うのではなく、復号できない条件として示します。

誤答から条件を取り戻す

図3は、6文字を各4ビットで表す問題で「6バイト」と答えた誤りを直す流れです。1バイトは8ビット、付加情報や圧縮はないものとします。誤答は文字数をそのままバイト数に置いていますが、1文字に何バイトを使うかは問題の条件で決まります。

図3 文字数をそのままバイトにした誤答の修正

正しくは6 × 4 で24ビットです。24ビットを8で割れば3バイトです。3バイトを24ビットに戻し、4ビットずつに分けると6組になります。元の6文字を表す条件を満たすので、答えは3バイトと確かめられます。図3の矢印は、文字数から直接バイト数へ飛ぶのではなく、ビット数を経由することを表します。

別の誤りとして、符号列を右端から読み始めることがあります。表にない長さのかたまりに分ける誤りもあります。どちらも数えた総ビット数が正しくても、復号した文字列は変わり得ます。問題が指定する先頭と1文字の長さを線で印し、表と照合しましょう。

また、本文が24ビットとわかっただけで、ファイル全体が必ず3バイトだと断定するのも危険です。付加情報がある条件なら、その分を別に足します。付加情報の量が示されない問題では、本文の量まで答え、ファイル全体の量は条件不足だと区別します。何が計算に入っているかを答えに添えると、数字の意味が明確になります。

符号表の問題では、同じ長さの列が異なる文字に重複して割り当てられていないかも確認します。重複していると、その列を受け取った側はどちらの文字だったか一意に決められません。逆に、表の中に未使用の列があっても、使用中の文字と列が重複していなければ、使用中の列は表に従って読み戻せます。列の種類数と実際に割り当てた文字数は同じとは限りません。

空欄を含む表が出た場合は、空欄を新しい文字の割当だと勝手に扱わないようにします。例えば3ビットで区切る約束なのに、最後に2ビットしか残らなければ、その部分は1文字分の完全な符号ではありません。それまでの完全な組を読めることと、末尾の文字を確定できることは別です。

自分で試す4問

次の問題はそれぞれ独立した学習用の条件です。1バイトは8ビットとし、明示された場合を除き付加情報、圧縮、端数を埋める処理はありません。先に4問を解き、その後で答えを照合してください。

問1

ナを 000、ニを 001、ヌを 010、ネを 011 とする固定長表があります。「ヌナネニ」を符号化し、区切りのない12ビットの列を答えてください。次に、その列を同じ表で読み戻した文字列も答えてください。

問2

ある固定長表では1文字を6ビットで表します。この表の文字を12文字並べた本文について、ビット数とバイト数を整数で求めてください。空白や記号は含まないものとします。

問3

表Cはハを 00、ヒを 01、フを 10、ヘを 11 とし、表Dはマを 00、ミを 01、ムを 10、メを 11 とします。表Cで「ヘハフ」を符号化した列を、表Dで復号すると何と表示されますか。列は変化せず、左端から2ビットずつ読みます。

問4

1文字を4ビットで表す固定長表で、本文を10文字保存します。本文とは別に16ビットの情報を加えるとき、合計のビット数とバイト数を求めてください。さらに、本文だけのビット列の末尾4ビットが失われた場合、残りの列を4ビットずつ読むと何文字分になりますか。失われた文字を推測して補わないものとします。

答えと確かめ方

問1の答えは 010000011001、読み戻した文字列は「ヌナネニ」です。ヌ、ナ、ネ、ニにそれぞれ 010、000、011、001 を対応させて連結します。答えを左から3ビットずつに戻せば同じ4組に分かれ、それぞれの文字も元に戻ります。12ビットを3ビットで割ると4組であることも、4文字という条件と一致します。

問2は72ビット、9バイトです。12 × 6 で72ビットとし、72を8で割ります。逆に9バイトを72ビットに直し、6ビットずつ分けると12組ですから、指定された12文字分になります。文字数の12をそのままバイト数にしないことが要点です。

問3は「メマム」です。表Cではヘ、ハ、フが 11、00、10 です。この順の列 110010 を表Dで2ビットずつ読むと、メ、マ、ムです。受信した列を表Cで戻せば元の「ヘハフ」になることと、表Dで読むと別の表示になることを区別します。途中で列が変化したと考える必要はありません。

問4は合計56ビット、7バイトです。本文は10 × 4 で40ビット、別の情報が16ビットなので合計56ビットです。7バイトを56ビットに戻し、付加情報の16ビットを除くと40ビットが残ります。4ビットずつ10組に分けられるため、元の条件に戻ります。末尾4ビットの喪失後は本文が36ビットで、9文字分です。失われた1文字の種類は、残った列だけからは決められません。

手元に残す要点

文字と符号の対応は、問題で与えられた表を使います。
固定長なら、文字数に1文字のビット数を掛けます。
バイトへの換算と付加情報の扱いは条件で確かめます。
復号は同じ長さで区切り、読む側の表を使います。
列が欠けた場合は、決められる範囲と決められない範囲を分けます。

答案のどこで止まったか

表を引けるのに文字列を戻せないときは、符号をつなぐ順序と区切る長さを、答案に書き込んで確かめます。量を求めるときに文字数をそのまま答えているなら、1文字あたりのビット数を書き、その単位を追ってみます。答えが合っていても、付加情報を含むかどうかが不明なら、何を足したかを説明できるようにします。

個別指導では、まず本人のノートにある表と問題の条件を並べ、どの段階で違う表を使ったか、どの単位で計算を始めたかを確認します。復号の途中が書かれていなければ、左端からの区切りを一緒に示し、元の文字列に戻るかを試します。条件と対応表を明示すれば、数字の暗記に頼らず文字の表現を追えます。

読んで終わりにするか、ここから変えるか。

武蔵境駅徒歩30秒、講師1人に生徒1人の完全1対1。授業のあいだ、先生は隣を離れません。いまの詰まりを、無料相談でそのまま話してください。

まず15分だけ電話で話したい方は、無料電話相談(15分)から。塾からお電話を差し上げます。

本気になった日が、入塾の日。

お子様の教育、迷ったら「丸投げ」してください。必ず、期待以上の結果で返します。武蔵野で育む、武蔵境で学ぶ。

電話は年中無休。365日、24時間、お電話可能。

チャットで質問チャット
無料相談を予約する 電話 0422-27-7828電話 LINE チャット
で質問