鸟哥的Linux私房菜(基础篇)-第零章、计算机概论(零.3)
最近更新日期:2009/08/03 3. 數據表示方式
3.1 數字系統
3.2 文字編碼系統
數據表示方式
事實上我們的計算機只認識0與1,記錄的數據也是只能記錄0與1而已,所以計算機常用的數據是二進位的。但是我們人類常用的數值運算是十進位,文字方面則有非常多的語言,臺灣常用的語言就有英文、中文(又分正體與簡體中文)、日文等。那么計算機如何記錄與顯示這些數值/文字呢?就得要透過一系列的轉換才可以啦!底下我們就來談談數值與文字的編碼系統羅!
數字系統
早期的計算機使用的是利用通電與否的特性的真空管,如果通電就是1,沒有通電就是0,后來沿用至今,我們稱這種只有0/1的環境為二進位制,英文稱為binary的哩。所謂的十進位指的是逢十進一位,因此在個位數歸為零而十位數寫成1。所以所謂的二進位,就是逢二就前進一位的意思。
那二進位怎么用呢?我們先以十進位來解釋好了。如果以十進位來說,3456的意義為:
3456 = 3x103 + 4x102 + 5x101 + 6x100特別注意:『任何數值的零次方為1』所以100的結果就是1羅。同樣的,將這個原理帶入二進位的環境中,我們來解釋一下1101010的數值轉為十進位的話,結果如下:
1101010=1x26 + 1x25 + 0x24 +1x23 + 0x22 + 1x21 + 0x20= 64 + 32 + 0x16 + 8 + 0x4 + 2 + 0x1 = 106
這樣你了解二進位的意義了嗎?二進位是計算機基礎中的基礎喔!了解了二進位后,八進位、十六進位就依此類推啦!那么知道二進位轉成十進位后,那如果有十進位數值轉為二進位的環境時,該如何計算?剛剛是乘法,現在則是除法就對了!我們同樣的使用十進位的106轉成二進位來測試一下好了:
圖3.1.1、十進位轉二進位的方法
最后的寫法就如同上面的紅色箭頭,由最后的數字向上寫,因此可得到1101010的數字羅!這些數字的轉換系統是非常重要的,因為計算機的加減乘除都是使用這些機制來處理的!有興趣的朋友可以再參考一下其他計算計概論的書籍中,關於1的補數/2的補數等運算方式喔!
文字編碼系統
既然計算機都只有記錄0/1而已,甚至記錄的數據都是使用byte/bit等單位來記錄的,那么文字該如何記錄啊?事實上文字檔案也是被記錄為0與1而已,而這個檔案的內容要被取出來查閱時,必須要經過一個編碼系統的處理才行。所謂的『編碼系統』可以想成是一個『字碼對照表』,他的概念有點像底下的圖示:
圖3.2.1、數據參考編碼表的示意圖
當我們要寫入檔案的文字數據時,該文字數據會由編碼對照表將該文字轉成數字后,再存入檔案當中。同樣的,當我們要將檔案內容的數據讀出時,也會經過編碼對照表將該數字轉成對應的文字后,再顯示到螢幕上。現在你知道為何瀏覽器上面如果編碼寫錯時,會出現亂碼了嗎?這是因為編碼對照表寫錯,導致對照的文字產生誤差之故啦!
常用的英文編碼表為ASCII系統,這個編碼系統中,每個符號(英文、數字或符號等)都會占用1bytes的記錄,因此總共會有28=256種變化。至於中文字當中的編碼系統目前最常用的就是big5這個編碼表了。每個中文字會占用2bytes,理論上最多可以有216=65536,亦即最多可達6萬多個中文字。但是因為big5編碼系統并非將所有的位都拿來運用成為對照,所以并非可達這么多的中文字碼的。目前big5僅定義了一萬三千多個中文字,很多中文利用big5是無法成功顯示的~所以才會有造字程序說。
big5碼的中文字編碼對於某些數據庫系統來說是很有問題的,某些字碼例如『許、蓋、功』等字,由於這幾個字的內部編碼會被誤判為單/雙引號,在寫入還不成問題,在讀出數據的對照表時,常常就會變成亂碼。不只中文字,其他非英語系國家也常常會有這樣的問題出現啊!
為了解決這個問題,由國際組織ISO/IEC跳出來制訂了所謂的Unicode編碼系統,我們常常稱呼的UTF8或萬國碼的編碼就是這個咚咚。因為這個編碼系統打破了所有國家的不同編碼,因此目前網際網絡社會大多朝向這個編碼系統在走,所以各位親愛的朋友啊,記得將你的編碼系統修訂一下喔!
出處:http://vbird.dic.ksu.edu.tw/linux_basic/0105computers_3.php
總結
以上是生活随笔為你收集整理的鸟哥的Linux私房菜(基础篇)-第零章、计算机概论(零.3)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 鸟哥的Linux私房菜(基础篇)-第零章
- 下一篇: 鸟哥的Linux私房菜(基础篇)-第零章