PR

【IT用語解説】ビット(bit)とバイト(byte)の違いとは?容量と通信速度の読み方を解説

ビットとバイトをコンピュータ基礎シリーズの統一デザインで表すアイキャッチ IT-Skills

ビット(bit)は、0と1のどちらかを取る二進数字であり、「二つの候補を区別する」ための基本単位です。バイト(byte)は8ビットを一つの単位として扱うもので、1 B = 8 bit、制約のない8ビット列なら28 = 256通りを区別できます。

ただし、0と1の並びだけを見ても、それが文字なのか数値なのかは決まりません。ビット列に意味を与える規則まで分かって、初めて「文字A」「数値65」「設定フラグ」などとして扱えます。

「bitは0か1、byteは8bit」は入口です。本当に押さえたいのは、なぜ二状態で情報を表せるのか、8bitがなぜ実務単位になり、どの規則で文字や数値へ変わるのかです。

このページで学べる内容
  • 二つの状態を0と1に対応させると、なぜ情報を表せるのか
  • nビットで2n通りを区別できる理由
  • キー入力、Unicode、UTF-8のバイト、ビット列の違い
  • バイトがアドレス・容量・文字符号化の実務単位になる理由
  • bとB、MbpsとMB/s、MBとMiBの正確な読み方
スポンサーリンク

ビットは「二つの状態を区別できる」という情報

NISTの用語集では、bitを「0または1の二進数字」と定義しています。ここで大切なのは、0や1という文字の形ではなく、二つの状態を区別して同じ規則で読み戻せることです。

たとえばスイッチに「開いている」「閉じている」という二状態があり、送る側と受け取る側が「開いている状態を0、閉じている状態を1と呼ぶ」と決めたとします。受け取る側は状態を見分ければ、0か1のどちらが送られたか判断できます。これが、二状態で1ビット分の情報を表せるという意味です。

実際の機器の中に、数字の0や1が小さく書かれているわけではありません。論理回路では電圧の低い範囲と高い範囲、DRAMやフラッシュメモリでは電荷やしきい値、磁気媒体では磁化の状態など、実装ごとに異なる物理状態を規則に従って0または1へ対応づけます

そこにあるもの 0・1との関係
論理的な表現 0または1 区別した二状態に付けた記号
集積回路の例 電圧の低い範囲/高い範囲 回路が定めた範囲を0または1として扱う
メモリ・ストレージの例 電荷、抵抗、磁化など 読み取り結果をビット値へ復元する

物理状態とビットは同じ概念ではありません。 たとえばNANDフラッシュには、複数の電荷状態を区別して1セルへ複数ビットを記録する方式もあります。「物理部品1個が必ず1ビット」と覚えると不正確です。媒体側の詳細はストレージとはで分けて考えます。

nビットなら2n通りを区別できる

1ビットには0と1の2通りがあります。2ビットに増やすと、1桁目の2通りそれぞれに2桁目の2通りを組み合わせられるため、2 × 2 = 4通りです。

1 bit : 0, 1                                      → 2通り
2 bit : 00, 01, 10, 11                           → 4通り
3 bit : 000, 001, 010, 011, 100, 101, 110, 111  → 8通り
8 bit : 00000000 ~ 11111111                     → 256通り

桁が一つ増えるたびに、既存の各パターンへ0を付ける場合と1を付ける場合が生まれるので、通り数は2倍になります。したがって、制約のないn桁のビット列が持てるパターン数は次の式です。

2 × 2 × …… × 2 = 2ⁿ 通り
  (n回)

8ビットなら256通りあるため、符号なし整数として読む規則なら0〜255を表せます。ただし「256通りある」ことと「0〜255という数値である」ことは別です。0〜255になるのは、各桁へ2の累乗の重みを割り当てる二進数として読んだ場合です。桁の重みと16進表記は2進数と16進数の仕組みで詳しく解説しています。

ビット列そのものに「文字」「数値」という意味はない

8ビット列01000001を見てみます。これは一つのパターンですが、パターンだけから用途は決まりません。

適用する規則・文脈 01000001の扱われ方
8ビット符号なし整数 数値65
UTF-8のテキスト 1バイト0x41をデコードしてUnicodeのU+0041、つまり「A」
8個のフラグ 各ビット位置が、それぞれの設定のON/OFF
画像データの一部 ファイル形式や位置に従った色・圧縮情報などの一部分

つまり、ビット列は意味を入れる容器というより、区別できるパターンです。データ型、文字エンコーディング、ファイル形式、通信プロトコルなどの規則が「この位置のこのビット列をどう解釈するか」を決めます。

コンピュータが「01000001はAだ」と人間のように理解しているわけではありません。 プログラムや回路が、指定された規則どおりに値を変換し、フォント描画など次の処理へ渡した結果、人にはAとして見えます。

なぜ8ビットをまとめた「バイト」が実務の単位になるのか

NISTの定義では、1バイトは8ビットの並びです。歴史上はbyteの幅が異なる機械もありましたが、現在の一般的なIT文脈では1 B = 8 bitとして扱います。8ビットを明示したい規格では「octet(オクテット)」という語も使われます。

8という数が自然法則から必然的に出てきたわけではありません。8ビット単位が規格や機器で定着し、その単位を前提にメモリ、OS、ファイル、通信のインターフェースがつながっているため、バイトが実務上の共通単位になっています。

場面 バイトが基本単位になる理由 注意点
メモリアドレス 現在の一般的なCPUでは、連続するアドレスがバイト単位の位置を識別する CPUは命令に応じて2、4、8バイトなどをまとめて読み書きし、内部ではさらに大きなキャッシュラインも扱う
ファイル ファイルをバイト列として読み書きし、サイズや位置をバイト数で指定できる 媒体上の使用量はファイルシステムの割り当て単位により、論理ファイルサイズより大きくなる場合がある
文字符号化 UTF-8などがコードポイントを1個以上のバイト列へ変換する 文字数とバイト数は一致しない
容量・転送量 ファイル、メモリ、ストレージの量をB、kB、MB、GBなどで数える 通信速度ではbit/sが多く使われ、bとBを読み分ける必要がある

NIST IR 8289も、個々のビットを直接アドレス指定できない多くの文脈では、バイトが実用上のデータ単位になると整理しています。またPOSIXのread()write()も、読み書きする量をバイト数で受け取ります。

memo.txtへAを追加すると、どこでビット列になるのか

ここからは、テキストエディタでmemo.txtを開き、半角英字のAを追加し、UTF-8で保存する例を最後まで追います。

キーを押した瞬間から「A = 01000001」が届く、と一気に考えないことがポイントです。入力イベント、文字の識別番号、保存用バイト列、物理状態は別の層です。

  1. Aキーの操作が入力イベントになる
    キーボード側の信号をOS、入力メソッド、UIフレームワークなどが処理します。キー位置、修飾キー、入力方式などが関係するため、この段階をそのままUTF-8の0x41とみなすことはできません。
  2. テキスト入力として「A」が確定する
    UnicodeではAへコードポイントU+0041が割り当てられています。コードポイントは文字を識別する番号であり、まだ「ファイルへ並べる1バイト」と同じものではありません。アプリ内部で実際に使う文字列表現も、UTF-8、UTF-16など実装により異なります。
  3. 保存時にUTF-8でエンコードする
    テキストエディタがUnicodeのコードポイント列を、UTF-8の規則でバイト列へ変換します。U+0041はUTF-8では1バイト0x41です。
  4. 1バイトを8ビットの並びとして書き渡す
    0x41は16進表記であり、同じ8ビットパターンを二進表記にすると01000001です。OSはこのバイトを既存内容に加えたバイト列としてファイルへ書き込みます。
  5. 装置がビット列を物理状態へ対応づける
    メモリ、バス、ストレージ制御装置、媒体は、それぞれの方式で電圧・電荷・磁化などの状態を扱います。後で読み出すと、規則に従って同じ論理バイト列へ復元されます。
Aキーの入力イベント、UnicodeコードポイントU+0041、UTF-8の1バイト0x41、8ビット列01000001、実装依存の物理状態を別の層として順に対応づけ、A・あ・絵文字ではUTF-8のバイト数が異なることを示す図
Aの入力からUTF-8保存まで。U+0041と0x41は役割が異なり、UTF-8のASCII範囲だから数値部分が一致しています。

Unicode Standard 17.0RFC 3629では、UnicodeのU+0000U+007FはUTF-8で同じ値の1バイト0x000x7Fになります。そのためAでは、コードポイント表記のU+0041とUTF-8バイトの0x41が似て見えます。

U+00410x41は同じ記法ではありません。 前者はUnicodeコードポイント、後者はここでは1バイトの値を16進数で書いたものです。Aで値が一致するのはUTF-8がASCII範囲をそのまま1バイトで表す設計だからで、日本語では一致しません。

「1文字 = 1バイト」ではない

UTF-8は、コードポイントに応じて1〜4バイトを使う可変長の符号化方式です。同じ「画面上では1文字に見えるもの」でも、必要なバイト数は異なります。

表示例 Unicodeコードポイント UTF-8のバイト列 バイト数
A U+0041 41 1 B
U+3042 E3 81 82 3 B
😀 U+1F600 F0 9F 98 80 4 B

したがって、memo.txtへ追加する内容がAなら1バイト、あなら3バイト、😀なら4バイトです。さらに、複数のコードポイントを組み合わせて一つに見せる絵文字や結合文字もあるため、見た目の文字数・コードポイント数・バイト数は別々に考える必要があります。

「Aを追加したらファイル全体が必ず1バイトだけ増える」とは限りません。 本文の1バイトは、UTF-8で符号化したAそのものの長さです。BOM、改行コード、保存時の変換が加わる場合があり、ストレージ上の使用量にはファイルシステムの割り当て単位も影響します。文字とバイト列の詳細は文字コードとはで確認できます。

小文字bと大文字Bを読み分ける

単位記号では、一般に小文字のbをbit、大文字のBをbyteとして使います。100 Mbと100 MBは8倍違うため、大文字・小文字は単なる表記ゆれではありません。

表記 意味 よく使う場面
bitb ビット 通信速度、データ幅
B バイト(8 bit) ファイル、メモリ、ストレージの容量
Mb/sMbps メガビット毎秒 回線速度・リンク速度
MB/s メガバイト毎秒 ファイル転送量・ストレージスループット

単位として厳密に書くならMb/sMB/sですが、製品画面ではMbpsも広く使われます。MBpsのような表記は見間違えやすいため、バイト毎秒はMB/sと書くほうが明確です。

100 MbpsをMB/sへ換算する

ここでMを10進のmega、つまり100万倍としてそろえます。100 Mbpsは1秒あたり100,000,000ビットです。1バイトは8ビットなので、バイト毎秒へ直すときは8で割ります。

100 Mbps
= 100,000,000 bit/s
÷ 8
= 12,500,000 B/s
= 12.5 MB/s

したがって、100 MB = 100,000,000 Bのファイルを100 Mbpsで送る最短時間は、単純計算では8秒です。

100 MB × 8 ÷ 100 Mb/s = 8 s

ただし、これは回線のビットレートをすべてファイル本体へ使えたと仮定した理論値です。実際の通信では、TCP/IPなどのヘッダー、確認応答、暗号化に伴う付加情報、再送があり、端末・Wi-Fi・サーバー・ストレージ側にも上限があります。TCP仕様のRFC 9293にも、ユーザーデータとは別のヘッダー項目や再送処理が定められています。

Mbps ÷ 8で求められるのは、同じ10進接頭語を使ったときの理論上のMB/sです。 アプリが受け取る実効速度は、通常この値以下になります。通信全体の層と役割はネットワークとはでつなげて理解できます。

MBとMiB:10進接頭語と2進接頭語を分ける

kilo、mega、gigaというSI接頭語は、10の累乗です。BIPMのSI接頭語では、kは103、Mは106、Gは109と定められています。2の累乗を明示する接頭語がKi、Mi、Giです。

単位 正確なバイト数 基準
1 kB 1,000 B 103
1 MB 1,000,000 B 106
1 GB 1,000,000,000 B 109
1 KiB 1,024 B 210
1 MiB 1,048,576 B 220
1 GiB 1,073,741,824 B 230

NISTの二進接頭語の整理でも、1 MBは1,000,000 B、1 MiBは1,048,576 Bと区別されています。したがって、100 MiBのファイルを100 Mb/sで送る理論時間は8秒ではなく、約8.39秒です。

100 MiB × 1,048,576 B/MiB × 8 bit/B
÷ 100,000,000 bit/s
= 8.388608 s

歴史的経緯から、画面や製品によっては2の累乗で数えた値にMB・GBと表示することもあります。容量差を正確に確認するときは、ラベルだけで判断せず、可能なら総バイト数も確認します。保存装置の接続形態を比較する場合は、既存のNAS・SAN・DASの違いも参考になります。

実務では「数字」より先に4つの前提を確認する

ビットとバイトの混乱は、計算よりも「何を数えているか」が抜けたときに起きます。ログ、設定、製品仕様を見るときは、次の順に確認すると整理できます。

  1. 単位はbかBか
    bitなのかbyteなのか。速度なら毎秒を示す/sが付いているか。
  2. 接頭語は10進か2進か
    MBなのかMiBなのか。製品独自の表示なら総バイト数も見る。
  3. ビット列へ意味を与える規則は何か
    整数、UTF-8、画像形式、プロトコルなど、どの規則で解釈しているか。
  4. どの層の量か
    回線の理論ビットレート、プロトコルを含む転送量、アプリのファイル本体、ストレージ上の使用量を混ぜていないか。

まとめ:情報はbitで区別し、byteで実務へつなぐ

  • 1ビットは、0と1に対応づけた二状態を区別する
  • nビットの各桁に2通りがあるため、2n通りのパターンを作れる
  • ビット列の意味は、データ型・文字符号化・ファイル形式などの規則が決める
  • 1バイトは8ビットで、一般的なメモリアドレス、ファイル、容量、符号化の実務単位になる
  • Aの入力イベント、UnicodeのU+0041、UTF-8の0x41、二進表記01000001は別の段階である
  • bはbit、Bはbyte。Mbpsを理論上のMB/sへ直すときは8で割る
  • MBは106 B、MiBは220 Bであり、同じ量ではない

memo.txtへAを保存できるのは、物理状態を0と1へ対応づけ、複数ビットで多数のパターンを作り、UnicodeとUTF-8の規則でその一つを文字Aのバイト列へ結びつけているからです。bitは区別できる情報の土台、byteはそのbit列をアドレス・容量・入出力で扱う共通単位と考えると、定義と実際の動作がつながります。

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