The Decimal System (SI)
In everyday commerce, storage capacity is measured with decimal SI prefixes: kilobyte (kB), megabyte (MB), gigabyte (GB), terabyte (TB). Each is 1000 times the previous:
- 1 kB = 1000 bytes
- 1 MB = 1,000,000 bytes (10⁶)
- 1 GB = 1,000,000,000 bytes (10⁹)
- 1 TB = 1,000,000,000,000 bytes (10¹²)
These are the values used by hard drive manufacturers, SSD manufacturers, and most network speed specifications. They are also the values on the labels of consumer storage products.
The Binary System (IEC)
Computing, at its heart, deals with powers of two. Memory addresses are binary. Cache sizes are binary. Sector sizes are binary. So historically, "kilobyte" often meant 1024 bytes, not 1000.
In 1998, the International Electrotechnical Commission (IEC) introduced new prefixes to disambiguate:
- 1 KiB (kibibyte) = 1024 bytes = 2¹⁰
- 1 MiB (mebibyte) = 1,048,576 bytes = 2²⁰
- 1 GiB (gibibyte) = 1,073,741,824 bytes = 2³⁰
- 1 TiB (tebibyte) = 1,099,511,627,776 bytes = 2⁴⁰
- 1 PiB (pebibyte) = 1,125,899,906,842,624 bytes = 2⁵⁰
These binary prefixes are now standardized in IEEE 1541-2002 and used widely in operating systems, memory specifications, and engineering contexts.
The Difference
The two systems start close and diverge as magnitudes grow. At the kilobyte level, the difference is 2.4% (1024 vs 1000). At the terabyte level, it is nearly 10%. At the petabyte level, it approaches 12.6%.
| Prefix | SI (decimal) | IEC (binary) | IEC / SI |
|---|---|---|---|
| kilo / kibi | 1,000 | 1,024 | 1.024 |
| mega / mebi | 10⁶ | 2²⁰ = 1,048,576 | 1.048576 |
| giga / gibi | 10⁹ | 2³⁰ ≈ 1.07 × 10⁹ | 1.073741824 |
| tera / tebi | 10¹² | 2⁴⁰ ≈ 1.10 × 10¹² | 1.099511627776 |
| peta / pebi | 10¹⁵ | 2⁵⁰ ≈ 1.126 × 10¹⁵ | 1.125899906843 |
Why Your 1 TB Drive Shows as 931 GB
Drive manufacturers use decimal SI. A "1 TB" drive contains exactly 1,000,000,000,000 bytes (10¹² bytes).
Many operating systems, however, display capacity using binary IEC units — but with the SI prefix labels. That is, they show a value in GiB but call it "GB".
To convert: 10¹² bytes ÷ 2⁴⁰ bytes per TiB = 1,000,000,000,000 ÷ 1,099,511,627,776 ≈ 0.9095 TiB. In GiB, that is 0.9095 × 1024 = 931.32 GiB.
So the operating system shows "931 GB", meaning 931 GiB. The drive really does hold one trillion bytes; the discrepancy is entirely a labeling issue.
Worked Examples
1. Converting MB to MiB
- 1 MB = 1,000,000 bytes.
- 1 MiB = 1,048,576 bytes.
- 1,000,000 ÷ 1,048,576 = 0.95367431640625.
- Result: 1 MB ≈ 0.9537 MiB.
2. Converting GB to GiB
- 1 GB = 1,000,000,000 bytes.
- 1 GiB = 1,073,741,824 bytes.
- 1,000,000,000 ÷ 1,073,741,824 = 0.9313225746154785.
- Result: 1 GB ≈ 0.9313 GiB.
3. A 500 GB SSD
- 500 GB = 500,000,000,000 bytes.
- ÷ 1,073,741,824 = 465.66128730773926 GiB.
- Result: 500 GB ≈ 465.66 GiB. The OS may display this as "465 GB".
Mbps vs. MBps — Same Issue, Different Context
Network speeds are usually quoted in bits per second. File sizes are usually quoted in bytes. Because a byte is 8 bits, a "100 Mbps" connection delivers about 12.5 MB per second of actual throughput — the difference is not a binary/decimal issue, but a bit/byte issue, and it compounds with the binary/decimal issue for storage.
Modern Practices
Modern operating systems have partially adopted the IEC prefixes:
- macOS (since 10.6) uses decimal SI (1 GB = 10⁹ bytes) for storage. A 1 TB drive shows as "1 TB".
- Windows uses binary values (1 "GB" = 2³⁰ bytes) but with SI labels. A 1 TB drive shows as "931 GB".
- Linux tools vary.
ls -lhdefaults to binary (KiB, MiB, GiB) but displays them with SI-style prefixes.ls --siuses true decimal.
There is no universal standard. The IEC prefixes (KiB, MiB, GiB) are the technically correct notation for binary magnitudes, but everyday language has not fully adopted them. When comparing storage capacities, always verify which system is in use.