1. 程式人生 > >“程式設計師節” 說說“資訊在計算機中的表示方法”

“程式設計師節” 說說“資訊在計算機中的表示方法”

天是程式設計師的“非法定”節日,沒有放假,我們先不發正式課程,先閒聊這10月24日為什麼會是程式設計師特有的節日,然後順帶說說大千世界的資訊在計算機中都是如何表示的? (不管怎樣,相比很快也要來的又11節電商節,顯然咱們這個1024程式設計師節終歸還在科學範疇內)

代電子計算機採用2進位制記載資料。1024正好是2的十次方,所以國外就有程式設計師自行將10月24日納為天下程式設計師的節日了,就像有些搞數學的選中了3.14。

什麼電子計算機採用二進位制記載資料這個事,連不是程式設計師的人也能理解啦:電子電路通電和斷電是兩個相對穩定而精確的狀態。想想如果銀行使用電子電路上的電壓值來表示儲戶們的存款的話,那該有多少黑客天天想破壞銀行機房的供電系統……

電子電路的通電斷電狀態類似,磁碟用某個點帶磁或不帶磁,光碟用連續的平滑或出現鐳射燒蝕的凹點來記載資料,來表示1或0。然後再用歸組的1或0表達資料。如果以2位為例,00表示十進位制的0。00加1到01,01表示10進位制的1;再加1得到10,表示十進位制的2;最後是11表示十進位制的3。11再加1呢?必須用三位的二進位制數表達,得到100,表示十進位制的4。

果用2的幾次方表達,二進位制的0是2的0次方,二進位制的10是2的1次方,二進位制的100是2次方。1024是2的十次方,所以用二進位制表達,應該是1後面帶10個零:

100 0000 0000。 通常我們稱為1K。

樣是100三個數字,十進位制就表示一百,二進位制卻只能表示4;可見二進位制數實在是浪費空間。這些空間對應的可能就是磁碟的容量,或者網路的頻寬。暫時地,如果沒有可以更穩定地表達三或更多種狀態的介質,並且是可以被高度整合的介質被發現或發明出來,這些浪費只能忍受了。不過電子計算機估計自己也很煩這麼長串的資料(這個原因純屬我瞎說),所以實際進行各種邏輯處理時,是以8位(bit)為一組,作為最小可直接處理的單位,稱為了一個位元組(byte)。通常稱“位/bit”為小B,而“位元組/byte”為大B。你家我家拉寬頻時,運營商號稱百兆千兆萬兆的網,用的是小B,所以實際更有意義的網速,應該除以8。電腦硬碟上的檔案大小,就是以大B(位元組)計算的。比如,一張風景圖片20M。其實是十進位制20 * 1024 * 1024個位元組。

到磁碟上的圖片檔案,比XXX.JPG;很容易聯想到磁碟上歌曲,比如一首MP3。實際使用時,前者電腦會將它顯示到螢幕讓我們看,後者電腦會將它播放出聲音讓我們看。而如果是一段視訊,電腦會播放出來,我們且聽且看。那電腦是怎麼知道這個檔案是圖,那個檔案是歌曲,再過去那個檔案是視訊呢?要知道,不管什麼檔案,它們的資料在電腦磁盤裡都是一堆的1和0啊。電腦顯然不知道,只有製作、傳播及使用的人知道。為了讓電腦能夠區分磁碟上一大堆檔案,主要有三個辦法,一個方法是在命名檔案時,給它一個副檔名,什麼.JPG、.GIF、.MOV、.MP3、.MP4的等等;另一個方法是約定某些檔案資料的最前面幾個位,用以表示這是什麼資料;最後一種辦法就是真讓電腦(當然,實際是電腦程式)來猜了。這三種方法都沒有什麼可靠性。比如第一種方法吧,許多同學硬盤裡某個深深的資料夾裡,明明是島國的小AV,可是檔名卻往往是 “《毛概理論第1到30節課堂筆記.doc》”。

一個數字,可以表達不同的含義,這個在現實生活中就已經是這樣了。比如 “66176”是什麼?我的直覺反應是歌曲《小草》的前5個音呢。而1024有人覺得不就是10月24日嗎?可宅得要命的程式設計師卻自作多情地聯想它是2的10次方。如果是我,可能又別有解釋。因為我第一次買車時,自選牌號就是“1024G”。家人說帶個4字不吉利,可我卻一直開著它在路上很得意,特別是某次開去軟體園,剛停在路邊,迎面款款走來三位都是女神級的美女,其中一位驚訝地叫出來:“看,這個車的容量正好1個T、1個T!”。我內心那得意啊。直到有一天在街上,突然一車竄出並超過我,我清楚地看到它的牌號是“1024T”,當時我就無地自容了。

個小段子,說是某外星人闖入大英帝國的圖書館,迅速瀏覽子全館的書籍,然後掏出一要能某種高精度金屬條,再掏出高精密的遊標卡尺,在金屬條上刻下一條線,就坐著UFO回到他們的星球了,這就帶走了大英帝國圖書館的所有內容……

個段子怎麼理解呢? 剛才不是說到圓周率嗎?大家都知道它是一個無限不迴圈小數,代表它後面可以有無窮盡個數。假設我們用3代表字母C,1代表字母A,4代表字母D,那”3.14“就是 ”CAD”,咦?不是正好有個英文單詞縮寫就叫CAD嘛!。外星人也是用這個方法,將大小寫英文字母,幾個標點符號,全編個號。然後將圖書館裡從第一本書第一個字元開始全部排在一起,就可以得到一大串數字(假設為0.N,N代表後面一大串數字)。再著在金屬條上刻下一個位置,設位置左邊長度為X,位置右邊長度為Y,並且有X除以Y正好是前面的0.N。

人說,這個段子有數學漏洞,人類的數字不就是0到9十個數字嗎?英文字母不區分大小寫就有26個了,十個數字不夠表達啊。 這就是缺少“進位制”的概念啦。簡單說,1位不夠,我們可以將2位編為一組嘛,比如0112中,01還代表A,而12則代表L嘛。如果外星個來的是北京的首圖的話,嗯,光給那麼多漢字編個序,就夠它折騰一下午的,哈哈;但最終還是可以輕鬆帶走所有知識的。

書中還有插圖呢,插圖千變百化,怎麼表達?這個就更不用擔心啦。以我們人類的知識,你現在電腦上不就是有許多圖片了嘛! 圖片表達的最直觀方法是一個二維座標,上面有不同的點,如果是張黑白圖,那就1表示黑,0表示白嘛。如果是彩色圖,就有4個位元組來表示種顏色。當然這麼涉及點物理知識:通過搭配三元色(紅綠藍),就可以調出千萬種顏色啦……

讀本文到這裡,八九不離十,你今天肯定已經在上班寫程式碼了……不過,既然過節,我們得來個小彩蛋吧自娛自樂一番吧。 前面說到外星人要是來到了首都圖書館竊取咱中國上下五千年的文化,那它(他?她?)就得為所有漢字挨個兒編個號。這件事其實咱人類自個兒已經做了,比如“啊”同學,它取到的號(數字)就是45213。看吧,足足要5位數呢!外星人此刻心裡應當是肅然起敬的“這國家真有文化!”。現在請開啟控制檯,然後用將鍵盤上的數字小鍵盤確保切換到“數字”狀態,再按下Alt鍵不換,然後輸入45213這個字,接著鬆開Alt鍵,是不是螢幕上輸出“啊”了? 哈哈,下面我就送出一串“編碼式的祝福”了,專門給懂得“一切資訊都可以編碼為數字”的程式設計師們: 46028  53490  54449  55278  46323。

(完)

歡迎關注 “程知網”  公眾號,第一時間微信上閱讀d2school新文章。掃一掃: