為什麼 Windows 使用違背兩百年前的國際 Metric prefix 規範的容量標註單位?

Windows中:

1KB = 1,024 Bytes
1MB = 1048,576 Bytes
1GB = 1,073,741,824 Bytes

按照英語的習慣,在表示數字時,縮寫的單字母K代表Kilo(千),M表示Mega(百萬)……
所以:

1KB = 1 KiloBytes = 1,000 Bytes
1MB = 1 MegaBytes = 1000,000 Bytes
1GB = 1 GigaBytes =1,000,000,000 Bytes

按照國際單位制詞頭(Metric prefix)標準:

1kB = 1 KiloBytes = 1,000 Bytes
1MB = 1 MegaBytes = 1000,000 Bytes
1GB = 1 GigaBytes =1,000,000,000 Bytes

實際上 Windows 應該使用 IEEE 1541 中描述的「二進位乘數詞頭」(prefixes for binary multiples),即:

1KiB = 1 KibiBytes = 1,024 Bytes
1MiB = 1 MibiBytes = 1048,576 Bytes
1GiB = 1 GibiBytes = 1,073,741,824 Bytes

按照兩百多年前制定的Metric prefix規範,kilo不應該用指代1,024個單位。IEEE後來在1541之中確認了此規範,使用Kibi作為新的字頭。因此微軟使用此單位,不符合業界規範。

如圖,518,668,118位元組,按照IEEE標準和Metric Prefix,對應的應是519MB而不是495MB。

518,668,118 Byte ≈ 519MB ≈ 495MiB

為何Windows會一直使用不符合規範的容量標註單位呢?

如圖,Ubuntu中使用了符合規範的內存容量標註方式

如圖,Windows中使用了符合規範的內存容量標註方式,該內存實際為6 GiB,也就是6.44 GB,Windows顯示的容量小於規範下的標註。

像OS X,新的版本特地更改為了符合規範的GB計算方式(特意更改也正是因為有了明確的業界規範),這樣一塊320GB硬碟在上面就是足量319.73GB,而在Windows上,則顯示為298GB,實際上應該是298GiB也就是320GB。


題主你好,既然你這麼糾結這個容量單位的標註方法,我們不妨先換個角度,看看你所推崇的 IEEE 1541 的具體情況:

第一,根據 Wikipedia,IEEE 1541 的成形時間是 2005 年,並且在 2008 年 3 月時重新核定了這一標準。

After a trial period of two years, in 2005, IEEE 1541-2002 was elevated to a full-use standard by the IEEE Standards Association, and was reaffirmed on 27 March 2008.

在此期間,微軟發行的操作系統 Windows XP 已如日中天,更改容量單位先不說有沒有必要,引起 user confusion 幾乎是一定的。

第二,IEEE 1541 的屬性只是一個 recommendation(鼓勵政策),而不是金科玉律,也不是題主認為的非得執行不可的「規範」(另見下文「又及」部分)。有的國家或地區願意將 IEEE 1541 採納為產品及服務標準(比如歐盟,但各個廠商仍然基於自願決定是否採用),有的國家或地區則可以 discard after noticing.

第三,根據 Wikipedia,IEEE 1541 在開源軟體以及科技文獻中逐漸被接受,但在其他領域內被接受的苗頭依然不旺,尤其是在商業操作系統領域。微軟的確是由於商業營銷考慮所以才繼續沿用原先的容量標註單位。

The IEC binary prefixes (kibi, mebi ...) are gaining acceptance in open source software and in scientific literature. However, elsewhere adoption has been slow, with some operating systems, most notably Windows, continuing to use SI prefixes (kilo, mega ...) for binary multiples, especially for marketing purposes, where they are used almost exclusively.

結論:IEEE 很高興你與他們站在一邊,認同他們為了消除這種容量標註的 confusion 而做出的努力。雖然你一口一個「規範」,但是 IEEE 與你一樣,只是這個「鼓勵政策」的提出者,無法強制所有商業公司做出相應的改變。而事實上,一旦改變,在相當長的時間內,confusion 可能只會更嚴重,甚至你自己也會受到影響。

又及:即使是業界「規範」,也並非是每條都有強制約束力的,如同我們生活中遇見的「規章條例」那樣,有相當一部分是鬆弛執行的,而且很多還是在關鍵領域裡。希望題主可以活化思維,以更加柔潤的眼光看待這個世界上的各種現象。


題主 @林燦斌 在這個問題下與答主們辯論時,一直高舉著IEEE 1541的旗幟,可是IEEE自己好像都沒把這個標準當回事啊!!!

我跑到IEEE library上,隨便找一篇文章:
IEEE Xplore: Quantum Electronics, IEEE Journal of

- (Current Issue)

大家看到了,是4795KB

我下載下來看一下:

4910280/1024=4795!!!
IEEE自己也是把KB當1024B用的啊……┑( ̄Д  ̄)┍


這個,嚴格來說,從最開始進位一直是2^10即1024,你去看DOS,早期的Linux絕對都是這麼計算的。
後來人們發現這樣計算過於反人類,又把進位改回了1000,但是以前的KB、MB和GB什麼的都在啊,所以,最喜歡折騰的一批人(沒錯,就是那群開源的傢伙)決定,保留以前的稱呼,一個叫MB,一個叫MiB……就這樣人為的區分開了。
這還是某一次ubuntu更新的時候提到的。後來不知道什麼時候OS X也跟著不反人類了,ms的人們懶得管這個,1024用了這麼多年不啥事沒有么,改什麼改,改了企業用戶出什麼幺蛾子了你負責啊?不改!

so……就是這樣了


我裝了個中文操作系統在中國用竟然要聽一個中國人的把我操作系統裡面的東西改成英文規範的,想想真是挺搞笑的說。


我建議微軟在中文系統應該用萬億兆作為單位,千位制是完全不符合我國規範的。


======================吐槽完畢,正面回應======================

不一定規範就是對的,更不一定不滿足規範就是傲慢。KiB這種表達方式1999年才定下來,Windows不過是沿用之前的罷了,何來一直使用錯誤的?

再說了,制定了規範就一定要遵守么?制定KiB這種規範的目的是什麼?是為了避免混淆,除了在計算機領域是使用二進位乘數之外,其他領域都是使用十進位乘數的。故而制定規範的時候必然不可能額外照顧計算機領域。

但在計算機領域內部,由於二進位定址的緣故,二進位乘數是占絕對優勢的。除了極個別的,諸如硬碟廠商為了容量好看和CPU主頻與地址無關的兩個應用之外,幾乎所有的KMGTP,全部都是二進位的乘數。說白了硬碟的扇區大小也是二進位的倍數,硬碟廠商選擇十進位乘數完全是為了自己的容量看起來更大而已。

為了遷就硬碟我們需要把所有的容量都給弄成十進位的么?內存條4.295GB一根,NTFS簇大小4.096KB?

提示:運行本遊戲遊戲內存4.295GB或以上,您本機內存只有3.758GB內存,遊戲無法啟動即將退出?

然後你覺得這個世界是會更好還是更混亂?


那麼,我們是否應當保留兩套規範呢?例如用KiB來表示二進位乘數。

某遊戲硬體需求:
1、磁碟剩餘空間 3.47GB。
2、內存4GiB或以上。

這樣更混亂了吧?


看來,我們只有把所有的單位都換成KiB、GiB、MiB吧,這樣才符合規範嘛。

您好,這裡是微軟客服,請問有什麼能幫到您的?
不好意思我買了個軟體要求有4GB內存才能運行,但是我看我電腦的機載內存是4GiB,請問這個軟體是可以運行的么?

這不是沒事找抽么?


消費者的習慣就是最好的規範,譬如說我們買個手機問支不支持4G就是問支不支持LTE,who care LTE是不是4G呢,有幾個人能分得清LTE和LTE-Advanced?

蘋果神馬的,其實都是為了make diffrence罷了。以Windows操作系統的市場佔有率和用戶習慣而言,MB才是正確的。


語言的用處是交流,而交流的前提是大眾認可,而非古人認可。

差強人意是表肯定意義的令人振奮的正面辭彙。。。但現代人更多的把它用於表達「不太令人滿意」或者說勉強還算過得去的負面含義。

空穴來風表達傳言的產生必然有根據。是對傳言有依據的肯定。。。而現代人更多的把它用於形容無根據的傳言。而「這個說法不是空穴來風」這種用法,反而表達了該傳言有根據。

如果是古人的用法就是對的,那麼毫無疑問我們現今對這兩個成語的用法都是錯的。可是這又有什麼意義?你用所謂正確的方式去使用,有人理解嗎?

所以我感覺,如果更多的人都認為1k就應該是1024,那麼1024就成了正確的解讀。雖然在某個標準看來它是錯的,但如果大家都習慣使用所謂錯的解讀方式,那麼這個詞就只好用錯誤的方式使用。這才是語言的本來意義。


因為人家願意——這就是為什麼


太多人想借提問來表達自己的觀點


題主你問「為什麼」,大家已經告訴了你「為什麼」,你卻在反駁各位答主告訴你的「為什麼」
所以你不是來問為什麼的,你是來找茬的


微軟的硬碟容量和內存統一使用KiB制,顯示為KB。
蘋果的硬碟容量使用KB制,內存用KiB制,全顯示為KB。
蘋果這就叫B格分裂。


趁這個機會介紹幾個 Wolfram|Alpha 單位轉換的例子:

1. 個中單位轉換:494 MB
2. 轉換成一個指定的單位:494 MB = ? MiB


繼 @Kyon N 之後,我又考證了幾個

1. 這是 IETF, 地址 clue

62594 / 1024 = 61.126953125
62594 / 1000 = 62.594 &<= 顯然不是這個

2. 這是 Intel, 地址 Sign In [要MKL訂閱]

901771365 / 1024 / 1024 = 859.996190071
901771365 / 1000 / 1000 = 901.771365 &<= 顯然不是這個

3. 這是 ACM ACM"s Visual Identity Standards Guide

Applied Perception.
8668067 / 1024 / 1024 = 8.26651287079
8668067 / 1000 / 1000 = 8.668067 &<= 顯然不是這個

題主醒醒啊,多上點1024吧


不是2的指數就是耍流氓。


作為程序員,難道不覺得2^10更適合一切皆是0和1的計算機嗎


不使用所謂的業界規範不一定就算錯誤的,這些所謂的規範其實也具有指導意義,MB和MiB的區別在現在這個時代真的沒什麼大差別。

另外,在英文的習慣中,operation還可以是手術的意思的,那我們要把OS改掉么(比如Interface System)?每個領域都有自己的jargon,同一個詞在不同領域也可以有截然不同的含義(例如ontology),見多了就了解了,沒必要糾結這些小問題,搞清楚概念之後就move on吧,這不是分析哲學。


因為 KiB, MiB 是裝逼的說法。參考:Why does Explorer use the term KB instead of KiB?


這是一個歷史遺留問題。行業沒有統一的規矩。windows只是將單位混用了而已,或者說,在它的平台上,它就這麼計算(1024的進位)和使用單位的(Megabyte的單位)。別的平台也有自己的規矩。

例如,所有版本的 Windows 系統都會將一個220bytes 的文件顯示為「1.00MB」,而 106bytes 的文件顯示為 976kB。[1]

在 Mac OS X 10.6 之前的 APPLE 系統也是這樣顯示,10.6之後將文件和磁盤大小都用 Megabytes 來表示,即將 10^6 bytes 的文件顯示為 1MB。[1]

參見維基百科:
[1]百萬位元組
[2]Mebibyte


這個問題,就跟前幾個星期國家推出《小蘋果》官方版廣場舞一樣。《小蘋果》這首歌都出了快一年了,廣場舞大媽都跳了快一年了,突然國家說,《小蘋果》應該按照他們的規範來跳,你說廣場舞大媽樂意嗎?
當然,實際情況是,《小蘋果》官方版僅僅是一個建議而已,並不是強制性的規範。原版(也就是《小蘋果》這首歌的原版MV里的動作)和官方版相比,官方版的動作精簡了很多。

題主,你這樣異想天開,真的好么?

舉個例子。USB3.0的標準是在什麼情況下推行的?是在USB2.0普及,當時沒有USB3.0提出的情況下推行的。這樣的規範是經過各大廠商認可,最終成了行業標準以及消費者現在所理解的東西。如果當時不是眾多廠商推行這套標準,廠商不認可,USB3.0能有今天么?
蘋果自行搞一套介面,只兼容自家的產品。各大安卓手機廠商認可並遵守同一套標準,使得不同品牌的安卓手機數據線可以通用。如果有廠家這時候自己搞一套標準,既不兼容蘋果數據線,也不兼容安卓數據線,而那種數據線在市面上很難買到,結果是什麼?市場不認可。

如果真的要以1000進位,影響到的行業不僅僅是計算機,還有通信行業。
手機流量的計算也是按照1024來算的。這樣的一套標準,國內的三家運營商沿用至今,也沒有人提出意見吧?(當然,你可以說,流量收費那麼高,就算是2048KB=1MB,也沒意見。)
如果題主真的執著於1000進位和1024進位的話,你可以選擇自己使用1000進位這套標準。
如果這樣的一套約定俗成的東西隨意更改,並與原有標準不兼容的話,是會出大問題的。
我剛才算了一下,Windows下的一個100GB分區,按照1000進位來算的話,是107GB。也就是說,相同容量下,1000進位的結果比1024要大。
假設題主的手機流量套餐是100MB,按照題主的演算法,是107MB。題主把107MB這個數字輸入手機上的流量監控軟體,並在一個月內正好用完。別忘了,監控軟體也是按照1024來進位的,除非題主自己設計一套。結果可想而知,運營商那邊說,這個月的流量超了。然後,題主拿著這一套理論去跟運營商理論,結果同樣是可想而知。


純吐槽,沒有正面回答問題,歡迎摺疊。


「518,668,118位元組,對應的應是519MB而不是495MB」

樓主你是逗比嗎?計算機存儲單位只有位元組,計算機中的K,G,T都是位元組的表達形式。並且每KB表示1024個位元組。
518,668,118表示有這麼多位元組數據存儲,轉換成human readable形式後的結果:

518,668,118/1024/1024=
494.6404628754GB

返過來計算依然可以得到正確的位元組數,也就是正確無誤的存儲數據。

下面,我將帶領大家走進科學,深刻理解題住是如何變成逗比而振振有辭的。

大家都知道數據存儲最怕的就是丟失或損壞,俗話說硬碟有價數據無價。稍微有一點錯誤就可能導致整個數據丟失,特別當計算機內部存儲出現錯誤的時候。
比如樓主存儲了518,668,118個位元組的數據在硬碟,有一天樓主自作聰明,想把微軟容量顯示結果四捨五入,本來微軟只顯示整數,並不是把小數點丟棄,結果494gb被樓主改成了495gb,也就是變成了495.6404628754GB。
當計算機定址這段數據後要進行單位轉換495.6404628754GB*1024*1024=519716694.000035位元組
這我都看不下去了,無論CHS還是LBA均表示無能為力。

ps:硬碟商紛紛表示支持樓主以1000為存儲單位。拒絕1024拒絕草劉


還有樓主想表達計算機使用國際單位符號的問題,這取決於不同領域對詞頭的理解,漢字在不同的上下文還有不同的意思和發音,計算機就不行了?難道150M不懂寫成150Mi就懂了?或者150Mb理解成150米,而150Mib就不認為是表示距離了嗎?任何事物都需要接觸和了解的過程,符號只是為了更加符合標準(IEC)。

題主同時給出了Windows和MacOS對硬碟容量不同的表現形式:
macos按每kb 1000位元組顯示
windows按每kb 1024位元組顯示
但最終都只是一種字面數據形式並不改變根本的位元組大小
即使在macos下對文件大小的表示也是不一樣的,終端依然按照1KB=1024B顯示
當建立一個10485760位元組(10MB)的文件時,終端顯示10MB而Finder顯示10.5MB

當我建立一個10000000位元組文件時,終端顯示9.5M,Finder顯示10M

按照兩百多年前制定的Metric prefix規範,kilo不應該用指代1,024個單位。IEEE後來在1541之中確認了此規範,使用Kibi作為新的字頭。因此蘋果終端使用此單位,不符合業界規範。

算了,什麼也不說了一切盡在不言中……


習慣問題,如果不是題主說,我一直都以為1KB=1024 byte.從來沒有聽過KiB,MiB這個單位。

百度百科的解釋:
MB_百度百科
1024MB=1GB
MB或MiB可以是:Mebibyte。220 = 1,048,576 位元組(Byte) Megabyte。106 = 1,000,000 位元組(Byte)

wiki的解釋:
Megabyte
The megabyte (symbol MB, sometimes abbreviated as Mbyte) is a multiple of the unit byte for digital information storage or transmission with three different values depending on context: 1000000 bytes generally for computer storage or transmission rates;1048576 bytes , (2^20,1024 kilobytes or a mebibyte) generally for computer memory; and in rare cases 1000×1024 (1024000) bytes.

所以一般的人都不怎麼區別這些。


有種東西叫做「事實標準」


多大的事,我還以為搶雞蛋呢,其實行業里有細分:K是1024,k是1000。別扯什麼英文,這裡是計算機的世界。
沒有一成不變的規矩,用一個英文「幾百年的習慣」來壓人,太牽強了。
什麼時候習慣比科學強了,冥王星都踢出九大行星了,如果沒有當初提出的人堅持己見,哪有後來這事實被承認?
我認為計算機世界裡,1024做1K比較科學,而且還很多受眾,這就夠了,何況現在都已經可以很科學的區分開來,你提蘋果,我回頭再去看看它用的是K還是k。
科學的世界裡是寬容、自由的。


是否可以這樣理解:

微軟把KB當做KiB來用,實際計算是按KiB(即1024)來的,時間長了,大家約定俗成微軟的KB就代表KiB(即1024制)。

但硬碟、內存生產廠家標註的KB、MB、GB卻是按(1000)來計算的,所以在Windows下計算後顯示容量偏小。

所以用1024大家並沒有爭議。問題是出在硬碟、內存生產廠家——他們沒有用公認的1024來計算並標註?


推薦閱讀:

為什麼用 USB 拷文件的速度遠低於理論值?
微軟粉是怎樣煉成的?
為什麼Excel圖標是X,而不是E?
微軟有哪句口號或者理念是最有代表性的??

TAG:微軟Microsoft | MicrosoftWindows | Linux | 計算機 |