キーボード

半角文字1文字が1byteになるのはどうして?

  • 2016/08/09 14:37:57
目次
  • 1:半角文字とは?
  • 2:ASCIIコードとは?
  • 2.1:ASCIIコードの文字識別
  • 2.2:番号は2進数で表す
  • 2.3:bitとbyteについて
  • 2.4:ASCIIコードの場合
  • 3:文字コードが違うと…
  • 4:まとめ

半角文字とは?

よく半角文字1文字が1バイトと説明されていますが、もう少し詳しく言うと「半角文字1文字を文字として認識するのに必要なのが1バイト」です。

単純に半角文字というと、多くの場合は「英数半角」のことを指しているかと思います。またこの「英数半角」は多くの場合ASCIIコードのことを指していると思われます。

ASCIIコードとは?

ASCIIコードは文字コードの1つの種類です。

文字コードとはある文字群をまとめて番号を付けて整理したものです。世の中にはいろいろの文字があるので沢山の文字コードが存在しています。

その中でもアルファベット・アラビア数字・記号をまとめた文字コードとして、もっともよく使われているのがASCIIコードです。

ASCIIコードの文字識別

このASCIIコードには128文字が含まれています。

  • 制御文字 32種 DELやbackspaceなど(印字できない文字)
  • 数字文字 10種 0から9
  • 大文字アルファベット 26種 AからZ
  • 小文字アルファベット 26種 aからz
  • 記号 33種 !@#$など

つまりASCIIコードでは文字一つ一つを識別するためには128個の個別番号が必要になるわけです。

10進数だと0から127までの番号が必要だということです。

番号は2進数で表す

2進数

パソコンの場合は2進数で番号を付けます。パソコンではスイッチのオンオフで計算するので2進数が都合が良いのです。

10進数を2進数で変換してみると以下のようになります。

0 0
1 1
10 2
11 3
100 4
101 5
110 6
111 7
1000 8
1001 9
1010 10
1100 11
1101 12
1110 13
1111 14
10000 15



1111111 127

0から1111111まで128種類の番号となります。

bitとbyteについて

ここで単位について少し説明しておきます。

よくbit(ビット)という単位を聞くと思います。bitは2進数のひと桁分、つまり1か0かを表します。

例えば2進数の

1010

4bitです。4つ桁がありますよね。

111111101001

は12桁あるので12bitです。

10100011

は8桁あるので8bitです。

パソコンでは計算効率など歴史的な経緯で、8bitを1つの単位として使うことが多いです。

8bitのことを1byteと呼びます。

ですから先ほどの

10100011

1byteとも言えます。

ASCIIコードの場合

ASCIIコードでは128個分の番号が必要だと説明しました。これは7bit分の大きさ(長さ)がある情報で表すことができるということになります。

もう少し簡単に言うと、7マス分の容量があれば128個分の個別番号(の1つ)を表すことができるということです。

文字ごとに7マス分必要になるので、メモリやハードディスクでも文字一文字を表すのに7マス分(7bit)の容量が必要になるわけです。

しかしさっきは8bit1byteと説明しました。ですがASCIIコードは7bitしかありません。一文字1byteではないですね?

実のところASCIIコードで表せられる文字は1byteの容量(マス目)を必要としません。

しかし歴史的な経緯などでパソコンで扱う情報の単位として8bit=1byteが定着していたために、ASCIIコードも通信チェックをするための情報をのせることで8マス分が必要な状態、すなわち8bit=1byte(8マス分)にしています。

ですからASCIIで表せられる文字自体は7マス、7bitで十分ですが、実際に扱うときには8マス、8bitが必要なのです。

文字コードが違うと…

もちろん文字コードが違う場合は、必要な個別番号の数も変わってきます。日本語の文字であるひらがな・カタカナ・漢字などを収録する場合、とても8bitでは足りないことがわかるかと思います。(ちなみに8bitでは256個分の個別な番号を表すことが出来きます)

現に日本語を収録している文字コードのUTF-8は3byte=24bitで表せられます。これは16,777,216通りの個別番号を表すことができます。

沢山の番号が使えますが、ひらがな・カタカナ・漢字を一文字を表すのに3byte(つまり24マス分の容量)が掛かることになります。単純に比べて良いわけではありませんが、ASCIIコードの3倍もマスが必要になるということなのです。

(ただし、UTF-8で半角英数を表す場合には、仕組み上1byte分の容量で済むようになっています。これはASCIIコードを内包しているからです)

まとめ

「半角文字1文字は1byte」と言う時は、「ASCIIでコードにおいて1文字は1byteで表すことができる」ということになります。

理由を箇条書きでもう一度整理しておきましょう。

  • 半角文字というと半角英数を指すことが多い
  • 半角英数はASCIIコードを指すことが多い
  • ASCIIコードは128個分の文字を収録しているコード
  • 個別な番号が128個あれば文字を識別できる
  •     

  • 128個の個別番号は7bitで表すことができる
  • 歴史的な経緯でASCIIコードは8bit=1byteで表すようになっている
  • 8bit=1byteなので半角文字1文字1byteの理由になっている