為何一個byte有8bit而不是7/9/4/16bit ?


4bit, 5bit, 7bit, 16bit 的 byte 都存在過,並且在某些小範圍內仍然存在。

至於為什麼 8bit 的 byte 成為了主流,這裡面最初的原因應該是 ASCII 碼是 7bit+1bit 校驗的格式,這個格式就是 8bit 存儲的。所以後來也就一直延續了這個制度。不容易再更改了。


首先為了便於計算,最大化利用資源,位元組作為最基本的數據單位,其位數和表示範圍都應當是2的整數次冪,即2,4,8,16,32,64等等。

因為8位的範圍是256,剛好可以表示英文字元,數字,控制字元,所以很順理成章地就選擇了8.

8和256都是2的整數次冪。

16位一般被稱為「雙字」,也是比較常用的一種單位。


byte是英文 by eight的縮寫,許多人都不知道。


對於這個問題的解釋主要分為兩方面,一方面是1byte確實曾經可以不是8bit,另一方面是「什麼樣的歷史因素」導致1byte現在是8bit。

感覺是做了一個語言(歷史)學的工作。。 。

==========Part I============

byte的概念最早是用來表示一個「字」,也就是char。

quora上在對於這個問題有人貼了一個來自60s的5bit Telex,它可以表示26個英文字母。

但是它無法取法大小寫,所以我們需要再加一個CapsLock,於是就有了6bits的byte。事實上,最早的商用機就是6bits的( IBM1401, Honeywell200, PDP8)。

6bits=64=54+10,恰好可以表示26個大小寫字母+10個數字了,但是我們還需要若干常用字元。於是就有了許許多多更為複雜的編碼系統,其中就包括IBM的EBCDIC(Extended binary coded decimal interchange code)和ASCII(American standard code for Information Interchange),它們都是8bit的編碼系統,處理拉丁字母、數字和常用符號是綽綽有餘了。其中ASCII是7bits+1parity,使得正確率大大提高(這可能是它後來廣為流行的原因之一)。雖然如今那一位已經不再需要作為奇偶校驗位而存在了。

為了表示更多的字元像是漢語、片假名、音標、顏文字、數學符合和滿足人類的各種腦洞,本還有更多的編碼系統。第一台迷你計算機有12bits,後來又有16bits的。

事實上,在C標準中,僅僅是要求1char≥8bits。也確實有不少對C/C++的實現是可以支持1byte=9,16,32,36bits的,實際上1byte到底有多大是作為一個常數CHAR_BIT寫在limits.h里的。(我找到了我的CHAR_BIT~發現它確實等於8!)

===========Part II===============

雖然這看起來是百花齊放的局面,1byte是多少bits完全是依賴於硬體的。但IBM在1964年推出的IBM360 family對8bits的推廣起到了非常大的意義;不過後來在home computer,personal computer市場中,ASCII打敗了EBCDIC成為主流編碼格式;但直到70s,1byte和8bits之間也並沒有畫上等號,tcp/ip協議中使用了octet的概念——1個IPv4的地址是4個octet——用來表示一個8bits的「字」,這就足以說明那時1byte=8bits還並不足以成為一條law。

主流廠商對於8bits硬體的支持和互聯網的普及使得8bits的byte慢慢取代了其他的byte,也使得byte=octet。1byte=8bit逐漸成為了de facto standard。

所以後來在需要有新的字符集和編碼系統的時候,人們不再選擇擴大byte_size,而是選擇用2個或4個byte,就是現在的utf-8和unicode等等。

1999年發布的IEC 60027-2中,寫入了1octet=8bit;2008年發布的的iso/iec 80000-3中,寫入了1byte=8bits。

所以這個「不成文的規定」就被作為正式的規定寫下來了。就像是把一個詞語寫進詞典,不過是對於過去的流行的總結罷了。我相信隨著時間的流逝,一切都會改變。這篇回答僅僅能解釋過去和現在,並不能解釋未來~

=======================

看到有評論說在音頻和視頻採樣的時候會用到不是8bits的byte,我覺得既然byte的大小已經被iso/iec承認了,那麼在現代的機器上還會有用不一樣的byte_size的嘛?這點我表示懷疑。

=======================

對這個問題蠻感興趣的。。就去google了一發。想找個地方整理一下,所以就寫在這裡了,也不知道合不合適。因為我英語實在是太差了,好不容易艱難讀了那麼多段英文,如果不寫下來就會忘記的,我不想忘記!


推薦閱讀:

從工作角度出發,學習編譯原理和操作系統哪個對於個人幫助更大?
如何看待清華大學計算機科學在U.S.News的排名中位列第二?

TAG:計算機科學 | 計算機原理 |