二進制定義
二進制是計算技術中廣泛采用的一種數制。二進制數據是用0和1兩個數碼來表示的數。它的基數為2,進位規則是“逢二進一”,借位規則是“借一當二”,由18世紀德國數理哲學大師萊布尼茲發現。當前的計算機系統使用的基本上是二進制系統,數據在計算機中主要是以補碼的形式存儲的。計算機中的二進制則是一個非常微小的開關,用“開”來表示1,“關”來表示0。
二進制與十進制轉換
我們已經發現,二進制的第n位代表的十進制值都剛好遵循着2的n次方這個規律
字符編碼
通過二進制的知識,大家已經知道計算機只認識二進制,生活中的數字要想讓計算機理解就必須轉換成二進制。十進制到二進制的轉換只能解決計算機理解數字的問題,那么文字要怎么讓計算機理解呢?
於是我們就選擇了一種曲線救國的方式,既然數字可以轉換成十進制,我們只要想辦法把文字轉換成數字,這樣文字不就可以表示成二進制了么?
約定了一個表,把文字和數字對應上,這張表就相當於翻譯,我們可以拿着一個數字來對比對應表找到相應的文字,反之亦然。
ASCII碼
假如我們就已經有這么一張表了
ASCII(American Standard Code for Information Interchange,美國信息交換標准代碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其他西歐語言。它是現今最通用的單字節編碼系統,並等同於國際標准ISO/IEC 646。
由於計算機是美國人發明的,因此,最早只有127個字母被編碼到計算機里,也就是大小寫英文字母、數字和一些符號,這個編碼表被稱為ASCII
編碼,比如大寫字母 A
的編碼是65
,小寫字母 z
的編碼是122
。后128個稱為擴展ASCII碼。
那現在我們就知道了上面的字母符號和數字對應的表是早就存在的。那么根據現在有的一些十進制,我們就可以轉換成二進制的編碼串。
GBK和GB2312
顯然,對於我們來說能在計算機中顯示中文字符是至關重要的,然而剛學習的ASCII表里連一個偏旁部首也沒有。所以我們還需要一張關於中文和數字對應的關系表。之前我們已經看到了,一個字節只能最多表示256個字符,要處理中文顯然一個字節是不夠的,所以我們需要采用兩個字節來表示,而且還不能和ASCII編碼沖突,所以,中國制定了GB2312編碼,用來把中文編進去。
Unicode
Unicode應運而生。Unicode把所有語言都統一到一套編碼里,這樣就不會再有亂碼問題了。
Unicode標准也在不斷發展,但最常用的是用兩個字節表示一個字符(如果要用到非常偏僻的字符,就需要4個字節)。現代操作系統和大多數編程語言都直接支持Unicode。
現在,捋一捋ASCII編碼和Unicode編碼的區別:
ASCII編碼是1個字節,而Unicode編碼通常是2個字節。
字母A用ASCII編碼是十進制的65,二進制的01000001;
字符0用ASCII編碼是十進制的48,二進制的00110000;
漢字“中”已經超出了ASCII編碼的范圍,用Unicode編碼是十進制的20013,二進制的01001110 00101101。
你可以猜測,如果把ASCII編碼的A用Unicode編碼,只需要在前面補0就可以,因此,A的Unicode編碼是00000000 01000001。
UTF-8
本着節約的精神,又出現了把Unicode編碼轉化為“可變長編碼”的UTF-8編碼。UTF-8編碼把一個Unicode字符根據不同的數字大小編碼成1-6個字節,常用的英文字母被編碼成1個字節,漢字通常是3個字節,只有很生僻的字符才會被編碼成4-6個字節。如果你要傳輸的文本包含大量英文字符,用UTF-8編碼就能節省空間。