同じ情報を記録するにも様々な方法があります
保存するデータは次の6つの月名。同じ情報を伝えるのに短い方がいい。
3月 9月 1月 12月 8月 10月
まず月の文字は不要。残りは数字だけなのでASCIIでOK
3 9 1 12 8 10
ビット列で表せば次の様になります。
文字 | 3 | 9 | 1 | 1 | 2 | 8 | 1 | 0 | |||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ビット列 | 00110011 | 00100000 | 00111001 | 00100000 | 00110001 | 00100000 | 00110001 | 00110010 | 00100000 | 00111000 | 00100000 | 00110001 | 00110000 |
16進表現 | 33 | 20 | 39 | 20 | 31 | 20 | 31 | 32 | 20 | 38 | 20 | 31 | 30 |
スペースは区切り文字として入れています。区切り文字にコンマを使うと次の様になります。
文字 | 3 | , | 9 | , | 1 | , | 1 | 2 | , | 8 | , | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ビット列 | 00110011 | 00101100 | 00111001 | 00101100 | 00110001 | 00101100 | 00110001 | 00110010 | 00101100 | 00111000 | 00101100 | 00110001 | 00110000 |
16進表現 | 33 | 2C | 39 | 2C | 31 | 2C | 31 | 32 | 2C | 38 | 2C | 31 | 30 |
区切り文字は1,12と11,2の区別のために必要です。全部の長さは13バイト(104 ビット)になります。
16進表示を使えば全部1桁で済みますから区切り文字がいらなくなります。この場合、全部の長さは6バイト(48 ビット)になります。
391C8A
ビット列では
文字 | 3 | 9 | 1 | C | 8 | A |
---|---|---|---|---|---|---|
ビット列 | 00110011 | 00111001 | 00110001 | 01000011 | 00111000 | 01000001 |
16進表現 | 33 | 39 | 31 | 43 | 38 | 41 |
かつては缶詰の製造年月の刻印に10を0、11をY、12をZとしていたことがあります。
1バイトの符号なし整数では0から255までの数を表現できます。この場合は文字では書くことができません。全部の長さは6バイト(48 ビット)になります。
ビット列では
数値 | 3 | 9 | 1 | 12 | 8 | 10 |
---|---|---|---|---|---|---|
ビット列 | 00000011 | 00001001 | 00000001 | 00001100 | 00001000 | 00001010 |
16進表現 | 03 | 09 | 01 | 0C | 08 | 0A |
4ビットあれば、0から15までの数値を表現できますから、4ビットで1つの月を表すと取り決めをすればもっと短く表現できます。全部の長さは3バイト(24 ビット)になります。
ビット列では
数値 | 3 | 9 | 1 | 12 | 8 | 10 |
---|---|---|---|---|---|---|
ビット列 | 0011 | 1001 | 0001 | 1100 | 1000 | 1010 |
16進表現 | 3 | 9 | 1 | C | 8 | A |
24ビットが最小ではありません。12種類の月が6つ並ぶデータですからその並び方は126通りあります。計算すると2985984です。
221=2097152、222=4194304 ですから、22ビットあれば表現できる計算です。
6つの月名を記録するには、
表現方法 | ビット | バイト | 備考 |
---|---|---|---|
文字(10進、区切り文字あり) | 88〜136 | 11〜17 | 可変長(上の例では13バイト) |
文字(16進) | 48 | 6 | 固定長 |
数値(8ビット) | 48 | 6 | 固定長 |
数値(4ビット) | 24 | 3 | 固定長 |
特殊コード | 22 | 3 | 固定長(2バイトでは16ビットまでなので3バイト) |
ただし、バイト数の部分は1バイトを8ビットとして最低必要なバイト数として計算しています。
データの転送や保存が8ビット単位であればこのバイト数が実際に必要になる量です。転送や保存がビット単位に行われる場合はビット数で計算します。
6つの日付を記録するには、
表現方法 | ビット | バイト | 備考 |
---|---|---|---|
文字(10進、区切り文字あり) | たぶん可変長 | ||
文字(?進) | 16進でも固定長にならない? | ||
数値(8ビット) | 固定長 | ||
数値(?ビット) | 固定長 | ||
特殊コード |
6つの月日を記録するには、
表現方法 | ビット | バイト | 備考 |
---|---|---|---|
文字(10進、区切り文字あり) | たぶん可変長 | ||
文字(?進) | 16進でも固定長にならない? | ||
数値(8ビット) | 固定長 | ||
数値(?ビット) | 固定長 | ||
特殊コード |