バイト (情報)

データ量あるいは情報量の単位

バイト (: byte) は、「複数ビット」を意味する、データ量あるいは情報量単位である。

バイトとビット

1980年頃から1バイトは8ビット (bit) であることが一般的であり、 正式に定義されたのは2008年発行のIEC 80000-13である。8ビットは、256個の異なる値(たとえば整数であれば、符号無しで0から255、符号付きで−128から+127、など)を表すことができる。

概要

編集

本来バイトとは、8ビット固定ではなく、扱う文字種や、あるいはワードサイズをいくつかに分割することによって決められる、1文字を表現する単位で、古くは直接的に「字」とか「キャラクタ」とも呼ばれていた単位に由来するものである(→「キャラクタマシン」および「ワードマシン」を参照)。歴史的には5ビットから12ビットまで存在したと言われる。DEC PDP-10NEC ACOS-6など、初期のコンピュータの多くでは6ビット、また7ビットや9ビットとして扱うコンピュータもあった。

しかし、System/360に始まり現在までその基本が引き継がれている、IBMのメインフレームのアーキテクチャが8ビットバイトであり、ミニコンピュータのベストセラーVAXや、8ビット時代以降のマイクロプロセッサの多くもそれに準じた設計であることもあり、一般にバイトは8ビットであることが多い。しかしそれでも、例えば通信分野などで、8ビットであることを明示するために、「オクテット」という語が使われることがある。

電子媒体の容量などは、ビット単位で表されることもあるが(チップの場合には構造上の理由もある[1])一般利用者の便宜上の観点からバイト単位で表されることが多い。メモリ空間のアドレッシングをバイト単位とするのは、前述のSystem/360で確立されたデファクトスタンダードである。バイトという語は情報量が1バイトの情報自体を指しても使われ、例えば「指定のバイトを読む」「バイトを処理する」などの言い回しに使用される。

単位としては、Bと略記され、同様にビットは小文字でbと略記されることがある。ただし、SI接頭語が付かない単なるバイトやビットは、意味が通じなかったり、誤解を招いたりする恐れがあるため、それぞれbyte (bytes)、bit (bits) と表記されることが望ましい。大きな情報量を表現する場合にはキロ、メガなどの2進接頭辞またはSI接頭語と共に使用される。1キロバイト (KB) は、場合によって1,000バイトとして扱われる場合と1,024 (210) バイトとして扱われる場合がある。2進接頭辞を使って1キビバイト (KiB) と表記した場合は必ず1,024バイトである。

国際単位系国際文書は、SI接頭語は厳格に10の整数乗を意味しているもので、2のべき乗を示すために用いてはならないと規定している[2]。したがって、1キロバイト (KB) を1,024 (210) バイトとして扱うことは禁じられている。

1970年代に8ビットのマイクロプロセッサが開発されたことで、このメモリサイズが普及した[3]。8086の直接の前身であるIntel 8080のようなマイクロプロセッサは、調整付き10進加算(DAA)命令のように、1バイト内の4ビットペアで少数の演算を実行することもできた。4ビットの値はしばしばニブル(ニブルバイト)と呼ばれ、16進数1桁で表現されます[4][5]

符号位置

編集

Unicodeには全角幅での単位記号も収録されているが、これらはCJK互換用文字であり、既存の文字コードに対する後方互換性のために収録されているものであるので、使用は推奨されない[6][7]。一部、Unicodeに含まれずMacJapaneseに収録。

記号 Unicode JIS X 0213 文字参照 名称
U+3385 - ㎅
㎅
キロバイト
U+3386 - ㎆
㎆
メガバイト
U+3387 - ㎇
㎇
ギガバイト
TB MacJapanese:0x865D
CSS: font-feature-settings: "dlig" 1;
テラバイト

総利用率

編集

多くのプログラミング言語がバイトデータ型を定義している。

CおよびC++プログラミング言語では、バイトは「実行環境の基本文字セットの任意の要素を保持するのに十分な大きさの、アドレス指定可能なデータ記憶装置の単位」と定義されている[8][9][10] (6 スタンダードC)。C標準では、整数データ型unsigned charは少なくとも256の異なる値を格納でき、少なくとも8ビットで表現されることを要求している(第5節。2421)。異なるCおよびC++実装は、バイトストレージ用に8、9、16、32、または36ビットを確保する[11]。さらに、CとC++の標準では、2バイトの間に空白を入れないことが要求されている。つまり、メモリ上の各ビットはバイトの一部である。

C#のような.NETプログラミング言語では、byteは符号なし型、sbyteは符号付きデータ型として定義されており、それぞれ0から255、-128から127の値をとる。

Javaでは、プリミティブ・バイト・データ型は8ビット・データ型として定義されている[12]。これは符号付きデータ型で、-128から127までの値をとる。

データ伝送システムでは、バイトはシリアル・データ・ストリームの連続したビット列として使用され、データの最小の区別可能な単位を表す[13][14]。非同期通信の場合、完全な送信ユニットには通常、さらにスタートビット、1~2個のストップビット、場合によってはパリティビットが含まれるため、そのサイズは実際のデータ5~8ビットに対して7~12ビットとなる[15]。同期通信では、エラーチェックは通常、フレームの末尾のバイトを使用する。

脚注

編集
  1. ^ ファミコンブームの時代には、カセットに搭載しているROMチップ(半導体部品業界ではビット単位が使われることが多い)のスペックを言っている、という理屈の下「2メガ搭載」などと単位を明示せずにビット単位の値で宣伝する、といったような広告手法があった。
  2. ^ 国際単位系国際文書第9版(2019)日本語版、p.112 右欄の注記
  3. ^ The History of Computers - 1970s”. www.lighterra.com. 2024年12月8日閲覧。
  4. ^ What is a bit, nibble or Byte?”. robotresearchlab.com. 2024年12月8日閲覧。
  5. ^ Measurement unit conversion: nybble”. www.convertunits.com. 2024年12月8日閲覧。
  6. ^ CJK Compatibility” (2015年). 2016年2月21日閲覧。
  7. ^ The Unicode Standard, Version 8.0.0”. Mountain View, CA: The Unicode Consortium (2015年). 2016年2月21日閲覧。
  8. ^ What is a "byte" in C / C++”. stackoverflow.com. 2024年12月8日閲覧。
  9. ^ Memory model”. en.cppreference.com. 2024年12月8日閲覧。
  10. ^ How many bytes does the C language char occupy?”. www.codeshelper.com. 2024年12月8日閲覧。
  11. ^ Okay, I could imagine a machine with 9-bit bytes. But surely not 16-bit bytes or 32-bit bytes, right?”. isocpp.org. 2024年12月8日閲覧。
  12. ^ Primitive Data Types”. docs.oracle.com. 2024年12月8日閲覧。
  13. ^ What is data transmission?”. www.pubnub.com. 2024年12月8日閲覧。
  14. ^ 1TBのデータ・ストレージはいくら?”. www.filemail.com. 2024年12月8日閲覧。
  15. ^ Serial Data Format”. www.ece.northwestern.edu. 2024年12月8日閲覧。

関連項目

編集
バイトの単位一覧
SI接頭語 2進接頭辞
単位(記号) SI基準 慣用値 単位(記号) SIとの(概数)
キロバイト (kB) 103 210 キビバイト (KiB) 210 2.400000%
メガバイト (MB) 106 220 メビバイト (MiB) 220 4.857600%
ギガバイト (GB) 109 230 ギビバイト (GiB) 230 7.374182%
テラバイト (TB) 1012 240 テビバイト (TiB) 240 9.951163%
ペタバイト (PB) 1015 250 ペビバイト (PiB) 250 12.589991%
エクサバイト (EB) 1018 260 エクスビバイト (EiB) 260 15.292150%
ゼタバイト (ZB) 1021 270 ゼビバイト (ZiB) 270 18.059162%
ヨタバイト (YB) 1024 280 ヨビバイト (YiB) 280 20.892582%
ロナバイト (RB) 1027 290 ロビバイト (RiB) 290 23.794004%
クエタバイト (QB) 1030 2100 クエビバイト (QiB) 2100 26.765060%
この表の上付き文字は環境により適切に表示されていない場合があります。