讓小朋友懂一點計算機(二)|二進位對數字和文字的表達

引言

前面的小短文我們講了二進制,二進制的表達方式很有限,單個載體只能表達出兩種信息。在這裡,這種單個載體稱之為比特位,比特位即

bit,是計算機最小的存儲單位,以0或1來表示比特位的值,對應於實際世界一個晶體管。但是眾人拾柴火焰高,人多力量大,我們可以使用多個載體來傳達信息。

一個晶體管只能表達0 和 1這兩種狀態,但是兩個晶體管可以表達4 (2的2次方 = 4) 種狀態,分別為:00、01、10、11。而三個晶體管可以表示8種狀態(2的3次方 = 8)。所以比特位的數目越多,我們可以表達的狀態和信息量就越多。

字節、字、雙字

一般來說,我們把8個比特位合在一起,可以理解為實際的8個晶體管稱為一個字節,英文單詞為Byte。把兩個字節合在一起叫做字,英文單詞為Word,如果兩個字合在一起,就叫做雙字,Double Word。對應關係如下:

1字節 = 8比特

1字 = 2字節 = 16比特

雙字 = 2字 = 4字節 = 32比特

此外,就像我們有千米,千克,一樣

1 KB = 1000 Bytes

1 MB = 1000 KB

1 GB = 1000 MB

1 TB = 1000 GB

這裡我用了1000作為換算比值,這是因為商家們在賣給我們產品的時候,比如宣稱U盤有32個G,但實際上我們插到電腦裡會發現只有29個G作業,除了一些必要的文件佔用之外,還有一個原因是因為商家的換算比值與計算機內部的換算比值不同,計算機內部的換算比值為1024,即1 KB = 1024 Bytes。至於為什麼商家為什麼要這樣,這可以說是一個商業噱頭,宣傳的時候數字大點可能消費者更喜歡。因此,換算比值可以是1024也可以是1000。

如何表示數字

我們現在用的是10進制,我們使用0-9這10個數字再加上很多的位數可以表達出無窮無盡的數字。為什麼158 這是數是意思是一百五十八,因為這是由8個1,5個10,1個100相加起來的數,我們會把每一位的數字乘以一個特殊的基數 這個基數會隨著位置的變化而變化,從右往左開始,第一位的基數是1,第二位的基數10,它是第一位基數的10倍,第三位是100,它是第二位基數的10倍,這很簡單。

158 = 1 * 10^2 + 5 * 10^1 + 8 * 1

158 = 100 + 50 + 8 = 158

同樣的,二進制110其實是10進制中的6

110 = 1 * 2^2 + 1 * 2^1 + 0 * 1

110 = 4 + 2 + 0 = 6

在這裡,我要提一下16進制16進制是一個很重要的進制。16進製表達二進制數起來會很簡短 例如二進制數11110011表示為16進制數就是0x0F3。16進制的每一位有15種表示狀態,分別為0-9再加上英文字母A-F,以表示10到15.,並且在書寫16進制數時,最好在前面加上0x。如果數字開頭為字母,則需要加上一個0,以防混淆,例如0xF要寫成0x0F。同樣的0x0F表示10進制的15:

0x0F = 0 * 16 + 15 * 1 = 15

正負數表示

如果需要區分正負數,那麼就需要佔用額外的比特位,如果不考慮正負,那麼一個字節可以表示0到255,如果要表示正負的話,我們會選擇從左到右的第一位作為正負標記,一般規定,1代表負數,0代表正數,例如:

10000001 的含義為 -1

00000001 的含義為 +1

這樣,所能表示的數的範圍就成為了-128到127。

浮點數表示

浮點數包含的信息很多,根據IEEE754標準,單精度我們需要32位來存儲信息

雙精度需要64位來存儲信息。

這裡舉一個例子,625.9可以用科學計數法表示為

0.6259 * 10^3

在這裡,有三個關鍵的參數

1、 符號位(Sign) : 0代表正,1代表為負

2、指數位(Exponent):用於存儲科學計數法中的指數數據,並且採用移位存儲

3、尾數部分(Mantissa):尾數部分

具體如下圖

讓小朋友懂一點計算機(二)|二進制對數字和文字的表達

浮點數表示法

如何表示文字

其實表示文字和表示數字差不多。直接上圖,來點感性認識:

讓小朋友懂一點計算機(二)|二進制對數字和文字的表達

這是一個簡單的字符打印小程序

這是一段很小的c程序,在這段程序裡,97這個數字如果輸出方式為數字,那它就是數字97,如果輸出方式為字符,那麼它就是英文小寫字母a, 98這個數字代表著小寫字母 b ,在這段程序的眼中,字符和數字沒什麼不同,本質都還是數字,這種人為規定就將字母和數字聯繫了起來。

由於早期的計算機基本都是在歐美或者是其他國家發明的,對於以英語為主的國家,所需要的字符量很少,阿拉伯數字,26個英文字母還有若干個標點符號就可以滿足基本的日常需要,這樣,把這種對應關係固定下來,就有了ASCII碼錶。

美國標準信息交換代碼是由美國國家標準學會(American National Standard Institute , ANSI )制定的,標準的單字節字符編碼方案,用於基於文本的數據。起始於50年代後期,在1967年定案。它最初是美國國家標準,供不同計算機在相互通信時用作共同遵守的西文字符編碼標準,它已被國際標準化組織(International Organization for Standardization, ISO)定為國際標準,稱為ISO 646標準。適用於所有拉丁文字字母。

ASCII 碼使用指定的7 位或8 位二進制數組合來表示128 或256 種可能的字符。標準ASCII 碼也叫基礎ASCII碼,使用7 位二進制數(剩下的1位二進制為0)來表示所有的大寫和小寫字母,數字0 到9、標點符號, 以及在美式英語中使用的特殊控制字符。

讓小朋友懂一點計算機(二)|二進制對數字和文字的表達

ASCII碼對照表

中國漢字的存儲

由於我們中國的漢字很特殊,每一個字都是唯一的,一般不能由其他字組合起來,不像英文單詞是由26個字母拼合起來的。因此,我們需要足夠多的數字來一一對應漢字,因此一般漢字的存儲需要兩個字節,或者說一個字,也就是16比特,

16比特可以存儲2^16次方 即 65536種信息。並且我們有自己的編碼規範。

《信息交換用漢字編碼字符集》是由中國國家標準總局1980年發佈,1981年5月1日開始實施的一套國家標準,標準號是GB 2312—1980。1995年又頒佈了《漢字編碼擴展規範》(GBK)。GBK與GB 2312—1980國家標準所對應的內碼標準兼容,同時在字彙一級支持ISO/IEC10646—1和GB 13000—1的全部中、日、韓(CJK)漢字,共計20902字。

隨著要支持的漢字越來越多,還有適應社會的不斷髮展,我們國家的編碼規範也在不斷地更新完善。

萬國碼

隨著世界各國的經濟文化交流越來越緊密,各國國家不能固步自封,迫切地需要一種統一的計算機字符編碼,這時,萬國碼(Unicode)出現了。

萬國碼,萬國碼,通俗的講就是全世界都通用的編碼,它為了全世界通用,採用了一種非常簡單的方法,就是將全世界所有的文字,符號都存放在一起。

Unicode 是有兩個字節、四字節之區分,UCS-4用4個字節編碼,可表示2的32次方,即4294967296種字符。

Unicode(統一碼、萬國碼、單一碼)是計算機科學領域裡的一項業界標準,包括字符集、編碼方案等。Unicode 是為了解決傳統的字符編碼方案的侷限而產生的,它為每種語言中的每個字符設定了統一併且唯一的二進制編碼,以滿足跨語言、跨平臺進行文本轉換、處理的要求。

通用字符集(Universal Character Set, UCS)是由ISO制定的ISO 10646(或稱ISO/IEC 10646)標準所定義的標準字符集。UCS-2用兩個字節編碼,UCS-4用4個字節編碼。

資料來源

特此鳴謝 The Crash Course


由於本篇涉及到的內容有些寬泛,因此只能給大家一個簡單的感性認識,並沒有涉及到圖片的存儲,因此下一篇會補上。如果讀者想深入探討,可以上網搜索相關資料,如果錯誤,望批評指正,不勝感激。



分享到:


相關文章: