読者です 読者をやめる 読者になる 読者になる

コージィコーンモテル

読書とRPGを趣味とするエンジニアのblog

byte(バイト)とoctet(オクテット)は違うよ

ネットワークプロトコルの話をしていると、よくoctet(オクテット)という単語が出てきます。8bit(ビット)のことです。

ん?8bitはbyte(バイト)じゃないの?同じ意味の単語?分野が違うだけ?

これ、たまに聞かれます。

コンピュータサイエンスの分野では常識ですし、どこにでも書いてあることなんですが、一応書きます。書く癖をつけるために。(つまり自己満)

1 byte == 8 bitsではない

結論からいうと、1byteは必ずしも8bitとは限らないのです。

Byteという単位はそもそも今でこそ 1byte = 8bits が主流ですが、もともとは「bitの集まり」という意味しかないんですね。厳密には、「1文字をエンコードするためのbit数」だったのが、それが理由で「メモリの最小単位」という意味になったようです(そう考えると、「マルチバイト文字」ってなんか違和感がしますね)。

余談ですが、byteは英語のbite(噛む)からきています。bitに「噛むの過去形」という意味があるのと、biteにも「ひとかたまり」という意味があるのでぴったりですね。biteだと、bitと間違うことがあるのでbyteにしたという話は有名です。さらに余談ですが、byteの半分の単位にnybbleというものも存在します。nibble(かじる)からきていることは明らかですが、こういうのを見てると計算機科学のネーミングってとてもフリーダムな感じで面白いなあと思います。マウスとポインタの動きの比の単位にMickeyがあるのとかね。話が逸れた。

話を戻しますが、昔は8bitエンコーディングが主流ではなかったとのことです。記号が少ないころは6-7bitで足りていましたし。8bit以上のシステムもいくつもあったようです(世代が違うので自分は馴染みはありませんが)。

それとは別に厳密な8bitを意味する単語が必要になりました。プロトコルからしたら、ホストのメモリの単位なんざ知らん!ってことになりますので、byteは使えません。これがoctetです。

つまり、定義としてはoctetが正しい8bitの単位となります。

なので、たまに人が「8ビットだから、1バイトですね」といったことを口にすると、ちょっと違和感を感じます(もちろん、「1byte=8bitのシステム上で」という前提を考えてなさそうなときだけですが)。

以上です。当たり前のことをながながと書いてしまった。久々に更新できたからよしとしよう