スポンサーリンク

1バイト文字と2バイト文字

エクセル雑学

今回はエクセルとは直接関係ないのですが、1バイト文字と2バイト文字について簡単にお話していきます。

全角文字=2バイト文字、半角文字=1バイト文字とだけ覚えていれば、エクセル上では基本的には困る事はありません。

もう少し掘り下げた話を読みたい方は続きをどうぞ。

機械が中でどう動いてるのかーみたいな内容です。

 

バイト(byte)とは?

ビット(bit)の集合体で、8bitで1バイト(byte)となります。

そしてbitとは、データの最小単位のことで、1bitの情報量とは、0か1かという2択の情報となります。

要するにただの2進数ですね。

ですので、1byteは8bitという事は、1byteは2進数8個分の集まりという事になります。

それでは2byteの情報量はどれくらいになるでしょう。

1bitは0と1の2通りだけでした。

2bitになると、00,01,10,11の4通りになります。

3bitだと、000,001,010,011,100,101,110,111の8通りになります。

このように、1bit増えるごとに、情報量は2倍に増えていきます。(2×2=4、4×2=8)

つまり、8bitの情報量は、2×2×2×2×2×2×2×2=256となり、256通りの情報量となります。

 

2進数の集まりがなんで文字になるの?

さきほど、1byte=8個の2進数の集まりというお話をしました。

最終的にこの2進数の集まりがアルファベットやカナといった文字になるのですが、なんで文字になるのかというと、例えば01000001という8bitの情報は、Aになるんだぞというように、文字コードとしてルール決めされているからです。

ただこの文字コード、万国共通というわけではないので、同じ1byteの情報でも、使う文字コードが違うと、まったく関係のない文字に置き換えられてしまう事があります。

文字化けの原因の1つですね。

とにかく、8個の2進数と、文字コード表を照らし合わせて、文字を表示させてるってことです。

あ、文字コードの種類にまで話を広げると収集つかなくなるので、ここでは触れません。

 

1バイト文字とは?

1バイト文字というのはその名の通り、1byteで表現できる文字の事をいいます。

ただ、1byteでは256文字しか表現できませんので、日本では数値とカタカナ、そして基本的な記号を表現するための文字コードが使われています。

もちろん漢字なんかに対応させる余裕はありません。

そういう厳しい環境の中で、それでも文章が作れる最小限の文字セットが1バイト文字なのですが、要は半角になれる文字達のことです。

 

2バイト文字とは?

1バイト文字は1byteで表現できる文字の事でしたので、2バイト文字もその名のとおり、2byteで表現できる文字の事です。

1byte増えただけで、いくつの文字が表現できるの?って、256×256で圧巻の65,536通りですよ。

こんだけ使えれば、漢字にだって対応できちまうってやつですよ。

で、この2バイト文字ですが、平仮名や漢字が細長いと読みにくいからなのか、どんな理由でそうなったのかまでは知りませんが、1バイト文字に比べて横幅もほぼ2倍の全角文字となっております。

まぁ理由はなんにせよ、結果として目で判別しやすいので助かります。

AとAのようにアルファベットはちょっとややこしい物が多いですが。(前者が半角なので1バイト文字で、後者が全角なので2バイト文字)

 

つまるところ

でっかい文字は2バイト文字、細い文字は1バイト文字。

これに尽きます。

 

もう少し深い話

途中、文字コードの種類には触れないと書きましたが、日本での主力2種類について少しお話しつつ、エクセル上でのLENB関数やLEFTB関数などの挙動について触れていきます。

現在の現在の日本では、Shift-JISと、UTF-8という文字コードが多く使われています。

Shift-JISとは、日本語を含む文字コードとして作られた、1~2バイトで構成された文字コードです。

そのため、エクセル上でLENB関数を使うと、半角は1、全角は2という結果になる事も理解できます。

次に、UTF-8ですが、こちらは世界中のほとんどの文字を取り扱っているかわりに、最大8バイトで構成される文字コードとなっています。

ですが、エクセル上でLENB関数を使ってみると、UTF-8では3バイトの文字でも、結果は1とか2になってしまいます。

Shift-JISに読み替えたうえでLENB関数が動いてるのかなぁとも考えたのですが、よくわかりませんでした。半分お手上げです。とはいえ法則みたいなのは見えたかなって感じです。

どういう実験をしたかというと、UTF-8のみに存在して、Shift-JISでは対応していない文字に対して、LENB関数を使ってみました。

その時の結果がコチラ。

これで気づいたのですが、まずShift-JISに対応している文字は、LENB関数が正常に機能するという事。

そして、Shift-JISに対応していない文字については、UTF-8で3バイト文字の場合はLENB関数の結果が1、4バイト文字の場合は2になってるのでは?という事。

そこで追加実験の結果がコチラ。

 

どうでしょう、そんな気がしてきませんか?

もちろん全文字実験なんてしてませんし、そういう仕様だと明言されてるソースも見つからなかったので、あくまでも予想ですが。

いやああああスッキリしましたね!

っていう事はアレですね!

LEFTB関数とRIGHTB関数でも同じ感じですよね!

3バイト文字が1バイト、4バイト文字が2バイトとして扱われるんでしょうね!

しってるしってる!

でも試しておこうね!

・・・

・・・なんで?

【Shift-JISに対応していない文字に対して】
LENB関数では3バイト文字を1バイト、4バイト文字を2バイトとして返すらしい。
でもLEFTB関数とRIGHTB関数では逆で、3バイト文字を2バイト、4文字文字を1バイトとして扱っている気配があるぞ!
なんでや!

コメント

タイトルとURLをコピーしました