ファイルサイズやストレージ容量を扱っていると、
1KB = 1024B
と覚えていたのに、SSDやHDDでは
1KB = 1000B
として計算されていることがあります。
さらに、
KiB
MiB
GiB
という見慣れない単位まで出てくると、少しややこしくなります。
この記事では、B・KB・MB・GBとKiB・MiB・GiBの違いを整理します。
まず「B」はByte
データ容量の基本になる単位はByte(バイト)です。
B = Byte
その上に、
KB
MB
GB
TB
といった単位があります。
たとえば一般的な表記では、
1 KB = 1000 B
1 MB = 1000 KB
1 GB = 1000 MB
1 TB = 1000 GB
となります。
これは10進数を基準にしたSI接頭辞です。
では「1KB = 1024B」は間違い?
完全な間違いというわけではありません。
コンピュータでは2進数を扱うため、
2^10 = 1024
が非常に扱いやすい数字です。
そのため昔から、
1024 B = 1 KB
1024 KB = 1 MB
のような表現が広く使われてきました。
しかし、1000倍と1024倍が同じ「KB」「MB」という名前で使われると混乱します。
そこで、2進数ベースの単位として、
KiB
MiB
GiB
TiB
が使われます。
KBとKiBは別の単位
厳密には次のように区別できます。
| 単位 | バイト数 |
|---|---|
| 1 KB | 1,000 B |
| 1 KiB | 1,024 B |
| 1 MB | 1,000,000 B |
| 1 MiB | 1,048,576 B |
| 1 GB | 1,000,000,000 B |
| 1 GiB | 1,073,741,824 B |
KiBは「キビバイト」、MiBは「メビバイト」、GiBは「ギビバイト」と読みます。
1000倍と1024倍でどれくらい差が出る?
小さいデータでは差はそれほど目立ちません。
たとえば、
1 KB = 1000 B
1 KiB = 1024 B
差は24バイトです。
しかし単位が大きくなると差も大きくなります。
1 GB = 1,000,000,000 B
1 GiB = 1,073,741,824 B
差は、
73,741,824 B
です。
約73.7MBの差になります。
TBクラスになると、この違いはさらに大きくなります。
1GBのストレージが「約0.93GiB」になる理由
1GBをGiBへ変換してみます。
1,000,000,000 ÷ 1,073,741,824
≈ 0.9313
つまり、
1 GB ≈ 0.93 GiB
です。
この違いが、ストレージ容量を確認したときに
「表示されている容量が少ない」
と感じる原因の一つになります。
実際には容量が突然減ったのではなく、単位の基準が違っているだけというケースがあります。
ファイルサイズではどちらが使われる?
ここが少し厄介です。
OSやソフトウェアによって、
KBと表示しているが1024倍で計算
している場合もあれば、
1000倍で計算
している場合もあります。
そのため、単に「500MB」と書かれているだけでは、厳密にはどちらの基準なのか分からないケースがあります。
正確なデータ容量を扱う場合は、
Byte数
を確認するのが確実です。
JavaScriptで容量を変換する
たとえばByteからMiBへ変換するなら、
function bytesToMiB(bytes) {
return bytes / 1024 / 1024;
}
console.log(bytesToMiB(1048576));
// 1
一方、ByteからMBへ変換する場合は、
function bytesToMB(bytes) {
return bytes / 1000 / 1000;
}
console.log(bytesToMB(1000000));
// 1
となります。
同じ「メガ」相当でも、基準が違うことが分かります。
5GiBは何MB?
まず5GiBをByteへ直します。
5 × 1024 × 1024 × 1024
= 5,368,709,120 B
これをMBへ変換すると、
5,368,709,120 ÷ 1,000,000
= 5,368.70912 MB
つまり、
5 GiB ≈ 5368.71 MB
です。
単位が混在すると暗算では間違いやすくなります。
複数のデータ容量単位をまとめて確認したい場合は、データ容量変換を使うと換算しやすくなります。
bitとByteも混同しやすい
データ容量では、もう一つ注意したいのがbitとByteです。
1 Byte = 8 bit
です。
Byteは大文字のB、
bitは小文字のb
で表記されることが多いです。
たとえば、
100 MB
100 Mb
は同じではありません。
通信速度では、
Mbps
Gbps
のようにbitが使われることが多く、ファイル容量ではMBやGBなどByteがよく使われます。
たとえば100Mbpsの通信速度は理論上、
100 ÷ 8 = 12.5 MB/s
相当です。
「100Mbpsなのに1秒で100MBダウンロードできない」という疑問は、bitとByteの違いを理解すると分かりやすくなります。
実装するときは単位を明示する
プログラムでデータ容量を扱う場合、
const size = 100;
だけでは、その100が何を意味するのか分かりません。
できるだけ、
const sizeBytes = 100;
const maxSizeMiB = 10;
のように単位を変数名へ含めると安全です。
APIの仕様でも、
bytes
KB
KiB
MB
MiB
のどれなのかを明確にしておくことで、単位変換によるバグを防ぎやすくなります。
まとめ
データ容量を扱うときは、まず1000倍と1024倍を区別することが重要です。
10進数ベースでは、
1 KB = 1000 B
1 MB = 1000 KB
1 GB = 1000 MB
2進数ベースでは、
1 KiB = 1024 B
1 MiB = 1024 KiB
1 GiB = 1024 MiB
となります。
さらに、
1 Byte = 8 bit
という違いもあります。
ファイルサイズ、クラウドストレージ、通信速度、APIの上限値などを扱うときは、「数字」だけでなく「どの単位・どの基準なのか」まで確認すると、容量計算のミスをかなり減らせます。
