0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
要換算的容量
在廠商使用的十進位單位(kB、MB、GB、TB)、作業系統顯示的二進位單位(KiB、MiB、GiB、TiB)與網路使用的位元之間換算容量。輸入數值後,除了所有換算結果,你還會看到 1 TB 的硬碟為什麼在電腦上顯示成 931 GB。
包裝盒上或系統中顯示的容量
TB 是包裝盒寫的,TiB 才是系統實際計算的
常見容量
包裝盒與作業系統的差別
1 TB廠商標示的容量
931.3226 GB 系統顯示的容量 931.3226 GiB 換成真正的單位
位元組1,000,000,000,000
廠商把每一級詞頭都算成 1000 位元組,所以得出 1,000 GB。作業系統用 1024 的次方衡量同樣的 1,000,000,000,000 位元組,於是顯示 931.3226 GB,但它實際上是 931.3226 GiB:一個位元組都沒少,螢幕上的數字卻小了 6.87 %。
換算結果
十進位(SI)· 1000 的次方
B位元組1,000,000,000,000
kB千位元組1,000,000,000
MB百萬位元組1,000,000
GB十億位元組1,000
TB兆位元組1
PB千兆位元組0.001
EB百萬兆位元組0.000001
二進位(IEC)· 1024 的次方
KiB二進位千位元組976,562,500
MiB二進位百萬位元組953,674.3164
GiB二進位十億位元組931.3226
TiB二進位兆位元組0.9095
PiB二進位千兆位元組0.0008882
EiB二進位百萬兆位元組0.0000008674
位元 · 每位元組 8 位元
bit位元8,000,000,000,000
kbit千位元8,000,000,000
Mbit百萬位元8,000,000
Gbit十億位元8,000
Tbit兆位元8
逐級詞頭對照
詞頭
十進位
二進位
差異
Kilo(千)
1 kB1,000 B
1 KiB1,024 B
+2.4 %1 kB = 0.977 KiB
Mega(百萬)
1 MB1,000,000 B
1 MiB1,048,576 B
+4.86 %1 MB = 0.954 MiB
Giga(十億)
1 GB1,000,000,000 B
1 GiB1,073,741,824 B
+7.37 %1 GB = 0.931 GiB
Tera(兆)
1 TB1,000,000,000,000 B
1 TiB1,099,511,627,776 B
+9.95 %1 TB = 0.909 TiB
Peta(千兆)
1 PB1,000,000,000,000,000 B
1 PiB1,125,899,906,842,624 B
+12.59 %1 PB = 0.888 PiB
Exa(百萬兆)
1 EB1,000,000,000,000,000,000 B
1 EiB1,152,921,504,606,847,000 B
+15.29 %1 EB = 0.867 EiB

二進位詞頭 KiB、MiB、GiB 與 TiB 自 1998 年起由 IEC(80000-13 標準)統一規範,正是為了消除這種歧義。Linux 與 macOS 已經遵循;Windows 檔案總管仍把實際上的 GiB 標示成 GB。

運作方式

儲存單位有兩種數法,而且兩種都沒錯。硬碟廠商與國際單位制使用的十進位,每一級詞頭都乘以 1000:1 kB 是 1,000 位元組,1 MB 是一百萬,1 TB 是一兆。隨電腦而生的二進位則乘以 1024,因為記憶體與匯流排都以 2 的次方定址。

問題在於這兩套體系數十年來用的是同一批名稱。Windows 檔案總管寫著「GB」時,實際計算的是二進位十億位元組,也就是連除三次 1024。所以一顆剛好裝著一兆位元組的 1 TB 硬碟,在螢幕上顯示成 931.32 GB:什麼都沒少,只是換了一把尺。1998 年起,IEC 80000-13 標準以二進位詞頭 KiB、MiB、GiB、TiB 解決了這個歧義。

這個工具會把容量同時換算到三套體系——十進位、二進位與位元,並列出精確的位元組數、廠商標示的數字,以及作業系統將顯示的數字和兩者的百分比差異。所有計算都在瀏覽器中完成。

範例

1 TB931,32 GB硬碟裡剛好有包裝盒承諾的 1,000,000,000,000 位元組。系統連除三次 1024 後顯示 931.32 GB,嚴格說是 931.32 GiB。螢幕上看起來少了將近 69 GB,硬碟上卻一個位元組都沒少。
1 GiB1073741824 B1 個二進位十億位元組是 2^30 位元組,而十進位的十億位元組是 1,000,000,000,所以二進位的大 7.37 %。你說「一個 G」時心裡想的量,和每個程式理解的量,差的就是這個數。
4 TB3,64 TiB詞頭越大,兩套體系差得越遠:千級 2.34 %、十億級 6.87 %、兆級 9.05 %。所以「硬碟怎麼這麼小」的感覺,反而在大容量硬碟上更明顯。
100 Mbit12,5 MB網路線路以位元計算,儲存以位元組計算。100 Mbit/s 的線路每秒最多下載 12.5 MB,因為每個位元組是 8 位元。光是這道換算,就能解釋一半對電信業者的抱怨。

使用情境

  • 弄懂 1 TB 的硬碟或 64 GB 的隨身碟為什麼顯示的容量比包裝上寫的少。
  • 把 API、記錄檔或 ls -l 指令回傳的位元組數換成看得懂的單位。
  • 在兩個用不同尺度計算的工具之間,比較備份或映像檔的大小。
  • 當文件寫 MiB 而介面寫 MB 時,估算配額、磁碟區或上傳上限。
  • 把線路速率 Mbit/s 換算成真正的下載速度 MB/s。
  • 用數字向客戶說明,他買的硬碟並沒有比承諾的容量少。

常見問題

我買了 1 TB 的硬碟,卻只看到 931 GB,是被騙了嗎?

沒有。硬碟裡有 1,000,000,000,000 位元組,而在所有廠商使用的十進位體系中,這正是 1 TB 的意思。Windows 拿同樣的位元組連除三次 1024,得到 931.32,卻把結果標成「GB」而不是「GiB」。這是標示的問題,不是容量的問題:位元組一個都沒少。真正會少掉的是另一回事——格式化時檔案系統保留的空間。

GB 和 GiB 有什麼差別?

1 GB 是 1,000,000,000 位元組(10^9),1 GiB 是 1,073,741,824 位元組(2^30),後者大 7.37 %。同樣的比例在每一級都會重複:kB 對 KiB、MB 對 MiB、TB 對 TiB。二進位符號中間多一個「i」,唸作 kibi、mebi、gibi、tebi。

所有作業系統顯示的都一樣嗎?

不一樣,這讓人更混亂。Windows 以 1024 的次方計算,卻標成 GB 與 TB,所以 1 TB 的硬碟顯示成 931 GB。macOS 自 2009 年起以十進位計算,同一顆硬碟就顯示成 1 TB。Linux 則要看工具:df -h 與 ls -lh 用 1024,df -H 與 ls -l --si 用 1000,許多工具在該寫 GiB 的地方已經寫 GiB。硬碟從沒變過,變的是量它的人。

為什麼記憶體容量和包裝上寫的一致?

因為記憶體是以 2 的次方製造與定址的:一條「16 GB」的記憶體實際上是 16 GiB,也就是 17,179,869,184 位元組。作業系統同樣以二進位計算,兩個數字自然吻合,沒有人會察覺。硬碟正好相反:廠商用十進位、系統用二進位,差距一眼就看得出來。

差異會隨詞頭增加多少?

每升一級累積 2.4 %。系統顯示的數字在千級小 2.34 %、百萬級小 4.63 %、十億級小 6.87 %、兆級小 9.05 %、千兆級小 11.18 %、百萬兆級小 13.26 %。所以幾 kB 的檔案感覺不到差異,而在好幾 PB 的陣列上就是數百 TB 的心理落差。

Mbit 和 MB 是同一回事嗎?

不是,差了八倍。網路線路以每秒位元計算,儲存以位元組計算,而 1 位元組是 8 位元。300 Mbit/s 的線路最多提供 37.5 MB/s 的下載速度,這還沒扣掉各層協定的標頭。而且網路詞頭永遠是十進位:1 Mbit 是一百萬位元,絕不是 1,048,576。

為什麼我的 SSD 空間又更少?

在十進位與二進位的差異之外,還要再加兩件事。第一是預留空間(over-provisioning):主控會保留一部分使用者用不到的快閃記憶體,用來替換磨損的區塊並加快寫入。第二是檔案系統,一格式化就會在表格、日誌與中繼資料上佔掉空間。這兩者都不是故障,而是硬碟能正常運作、能用得久的代價。

那麼撰寫文件時該用哪種單位?

用不會讓人誤會的那一種。數值若以 1024 的次方計算,就寫 MiB 或 GiB;若以 1000 的次方計算,就寫 MB 或 GB。在 API 或設定檔中,最保險的做法是直接提供位元組數,讓介面決定怎麼顯示。這一行程式碼能省下好幾個小時的爭論:為什麼兩個工具對同一個檔案報出不同的數字。