ビット(bit)は、0と1のどちらかを取る二進数字であり、「二つの候補を区別する」ための基本単位です。バイト(byte)は8ビットを一つの単位として扱うもので、1 B = 8 bit、制約のない8ビット列なら28 = 256通りを区別できます。
ただし、0と1の並びだけを見ても、それが文字なのか数値なのかは決まりません。ビット列に意味を与える規則まで分かって、初めて「文字A」「数値65」「設定フラグ」などとして扱えます。

「bitは0か1、byteは8bit」は入口です。本当に押さえたいのは、なぜ二状態で情報を表せるのか、8bitがなぜ実務単位になり、どの規則で文字や数値へ変わるのかです。
ビットは「二つの状態を区別できる」という情報
NISTの用語集では、bitを「0または1の二進数字」と定義しています。ここで大切なのは、0や1という文字の形ではなく、二つの状態を区別して同じ規則で読み戻せることです。
たとえばスイッチに「開いている」「閉じている」という二状態があり、送る側と受け取る側が「開いている状態を0、閉じている状態を1と呼ぶ」と決めたとします。受け取る側は状態を見分ければ、0か1のどちらが送られたか判断できます。これが、二状態で1ビット分の情報を表せるという意味です。
実際の機器の中に、数字の0や1が小さく書かれているわけではありません。論理回路では電圧の低い範囲と高い範囲、DRAMやフラッシュメモリでは電荷やしきい値、磁気媒体では磁化の状態など、実装ごとに異なる物理状態を規則に従って0または1へ対応づけます。
| 層 | そこにあるもの | 0・1との関係 |
|---|---|---|
| 論理的な表現 | 0または1 | 区別した二状態に付けた記号 |
| 集積回路の例 | 電圧の低い範囲/高い範囲 | 回路が定めた範囲を0または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 |
| 画像データの一部 | ファイル形式や位置に従った色・圧縮情報などの一部分 |
つまり、ビット列は意味を入れる容器というより、区別できるパターンです。データ型、文字エンコーディング、ファイル形式、通信プロトコルなどの規則が「この位置のこのビット列をどう解釈するか」を決めます。
なぜ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」が届く、と一気に考えないことがポイントです。入力イベント、文字の識別番号、保存用バイト列、物理状態は別の層です。
- Aキーの操作が入力イベントになる
キーボード側の信号をOS、入力メソッド、UIフレームワークなどが処理します。キー位置、修飾キー、入力方式などが関係するため、この段階をそのままUTF-8の0x41とみなすことはできません。 - テキスト入力として「A」が確定する
UnicodeではAへコードポイントU+0041が割り当てられています。コードポイントは文字を識別する番号であり、まだ「ファイルへ並べる1バイト」と同じものではありません。アプリ内部で実際に使う文字列表現も、UTF-8、UTF-16など実装により異なります。 - 保存時にUTF-8でエンコードする
テキストエディタがUnicodeのコードポイント列を、UTF-8の規則でバイト列へ変換します。U+0041はUTF-8では1バイト0x41です。 - 1バイトを8ビットの並びとして書き渡す
0x41は16進表記であり、同じ8ビットパターンを二進表記にすると01000001です。OSはこのバイトを既存内容に加えたバイト列としてファイルへ書き込みます。 - 装置がビット列を物理状態へ対応づける
メモリ、バス、ストレージ制御装置、媒体は、それぞれの方式で電圧・電荷・磁化などの状態を扱います。後で読み出すと、規則に従って同じ論理バイト列へ復元されます。

Unicode Standard 17.0とRFC 3629では、UnicodeのU+0000〜U+007FはUTF-8で同じ値の1バイト0x00〜0x7Fになります。そのためAでは、コードポイント表記のU+0041とUTF-8バイトの0x41が似て見えます。
「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バイトです。さらに、複数のコードポイントを組み合わせて一つに見せる絵文字や結合文字もあるため、見た目の文字数・コードポイント数・バイト数は別々に考える必要があります。
小文字bと大文字Bを読み分ける
単位記号では、一般に小文字のbをbit、大文字のBをbyteとして使います。100 Mbと100 MBは8倍違うため、大文字・小文字は単なる表記ゆれではありません。
| 表記 | 意味 | よく使う場面 |
|---|---|---|
bit、b |
ビット | 通信速度、データ幅 |
B |
バイト(8 bit) | ファイル、メモリ、ストレージの容量 |
Mb/s、Mbps |
メガビット毎秒 | 回線速度・リンク速度 |
MB/s |
メガバイト毎秒 | ファイル転送量・ストレージスループット |
単位として厳密に書くならMb/sやMB/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にも、ユーザーデータとは別のヘッダー項目や再送処理が定められています。
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つの前提を確認する
ビットとバイトの混乱は、計算よりも「何を数えているか」が抜けたときに起きます。ログ、設定、製品仕様を見るときは、次の順に確認すると整理できます。
- 単位はbかBか
bitなのかbyteなのか。速度なら毎秒を示す/sが付いているか。 - 接頭語は10進か2進か
MBなのかMiBなのか。製品独自の表示なら総バイト数も見る。 - ビット列へ意味を与える規則は何か
整数、UTF-8、画像形式、プロトコルなど、どの規則で解釈しているか。 - どの層の量か
回線の理論ビットレート、プロトコルを含む転送量、アプリのファイル本体、ストレージ上の使用量を混ぜていないか。
まとめ:情報はbitで区別し、byteで実務へつなぐ
memo.txtへAを保存できるのは、物理状態を0と1へ対応づけ、複数ビットで多数のパターンを作り、UnicodeとUTF-8の規則でその一つを文字Aのバイト列へ結びつけているからです。bitは区別できる情報の土台、byteはそのbit列をアドレス・容量・入出力で扱う共通単位と考えると、定義と実際の動作がつながります。
