二進制數(shù)及其他
原碼 最高位表示符號,其他位表示數(shù)值,則這種表示方法就是原碼。如
[+10]原=0000 1010B
[ -10]原=1000 1010B
反碼 對于正數(shù),反碼和原碼一樣。對于負數(shù),反碼就是把原碼符號不變,數(shù)值為取反,如
[+10]反=0000 1010B
[ -10]反=1111 0101B
補碼
對于正數(shù),補碼和原碼一樣,對于負數(shù),補碼就是把反碼加 1,如
[+10]補=0000 1010B
[ -10]補=1111 0110B
總結(jié)一下,對于正數(shù),[X]補=[X]原
負數(shù) ,[X]補=[X]反 +1
補碼費勁的得到了有水木好處呢?我們用補碼的話就可以直接帶符號參與運算了。還是上面的例子。
[+10]補=0000 1010B
+ [ -10]補=1111 0110B
———————————————————
1 0000 0000B
得到的結(jié)果是 0,可能有人說了,不是最前面有個 1 的嗎,怎么會是 0 呢。這里我們不要忘記了,在計算機 中,所有的數(shù)據(jù)位數(shù)是固定的,我們這里舉例為 8bit 的例子,那么得到結(jié)果后我們也只能保存八位,你看看 上面的結(jié)果,一共有 8 個 0,計算機只能保存這 8 個 0,最前面的 1 是不算在結(jié)果里的。所以,得到的結(jié)果 就是正確的。
補碼的運算中還有一個溢出的問題,大家可以試著用補碼來計算一下 -98+(-50),你會發(fā)現(xiàn)得到 了一個最高位是 0 的八位數(shù),也就是說,變成了一個正數(shù)。這就是超出了數(shù)據(jù)范圍,產(chǎn)生了溢出。關(guān)于溢 出,因為不是重點,大家可以自己查書找到答案。
3 萬物歸于陰陽
《易傳》記錄“易有太極,始生兩儀。兩儀生四象,四象生八卦。這里所說的兩儀,就是陰和陽。這 里所說的卦,是宇宙間的現(xiàn)象,是我們?nèi)庋劭梢钥匆姷默F(xiàn)象,宇宙間共有八個基本的大現(xiàn)象,而宇宙間的萬 有、萬事、萬物,皆依這八個現(xiàn)象而變化,這就是八卦法則的起源。而八卦的來源就是陰陽。 我國古代人們 發(fā)明的太極八卦用陰陽能夠代表世間萬物,那么由 0 和 1 組成的二進制數(shù)自然能夠表示世間所有東西,而不 僅僅是幾個數(shù)字。也就是說我們現(xiàn)實生活中的圖形、圖像、聲音、文字、色彩等等,都可以用二進制數(shù)表 示,當(dāng)然也可以在計算機中處理和顯示出來。其實這個做到了的,否則我們今天也就不會有電腦里的圖片、 音樂、視頻、文字等等,我們今天的世界將不會這么多姿多彩。
那么,單純的 0 和 1 如何表示世間的萬物呢?這里要講到一個詞:代碼。代碼,從字面意思來看, 就是代替的碼字,即我們找一組二進制數(shù)來代替,代替誰呢?代替世間的萬物。到這里可能有人會有疑問 了?既然是代替的,必然不是真的,有什么用呢?自然有用,要是沒用的話我們不會隨時隨地的使用。其實 我們就是生活在一個代碼的世界里,如我們的名字就是一個代碼,用漢字給我們每個人的一個代碼,代表一 個個體。在學(xué)校里,每個學(xué)生都有一個學(xué)號,而這個學(xué)號就是一個代碼,用一組十進制數(shù)來代表一個學(xué)生。 甚至我們所說的課桌,操場等等名詞都是代碼,用漢字來代表某個物體或者某種意義。代碼到底有什么好處 呢?方便于我們的溝通和交流。還是以我們的名字為例來說。如果一個人叫“張三”,那么我們有事情要找 他,那么就喊“張三”,叫張三的人就答應(yīng)了,于是你可以跟他交流了。合同上要雙方簽字,而就是簽的名 字,合同簽完后就可以存檔了,不管經(jīng)過多久,其他人看到這個簽字,就知道這是經(jīng)過雙方本人認可了的, 而不需要雙方兩個大活人親自告訴你說,這個合同我認可了的,因為名字就代表了其本人。如果我們不用代 碼,那么一個合同文本上必須有兩個人站在那里,證明合同雙方都同意的,這是一件和荒唐的事情,文件柜 里站著兩個大活人不是很滑稽和不可能的事情嗎?所以,我們使用代碼。注意的是代碼就是代碼,不是人本 身,你的名字不等于你這個人本身,它僅僅代表你這個人,我們不能說幾個漢字和活生生的人是一樣的吧。 每個人都有血有肉,有情感,但是漢字只是一些筆跡,不會有血肉。
代碼,有任意性,就是我們可以用任何的東西來代表某個含義,如漢字里的“桌子”和英語里 的“desk“都是代表了同一種東西。這也表示這我們可以用隨意的什么來代表我們每個人,我們的名字是漢 字,兩個或者三個或者四個漢字,當(dāng)然,我們也可以用數(shù)字來代表我們每個人,比如監(jiān)獄里每個囚犯都有一 個編號,這個編號就是用十進制數(shù)來給每個人的代碼。雖然代碼有隨意性,但是我們一般不會隨意的進行編 寫代碼,而是按照某種規(guī)律來編碼,因為有規(guī)律的代碼使我們的維護更加方便。我們每個人的身份證就是一 個代碼,是很有規(guī)律的,不知道有沒有注意到這個規(guī)律。
代碼就是用碼字來代替,我們編寫代碼的過程叫做編碼,有時候也稱代碼為編碼。我們可以用 0 和 1
的二進制數(shù)按照某種規(guī)律排列起來代表任何一個事物,下面講幾種常用的代碼。 二——十進制代碼
二——十進制代碼就是用二進制數(shù)對十進制數(shù)編寫代碼,也就是說用 0 和 1 來給十進制數(shù)的 10 個數(shù)
碼 0~9 進行編碼,也稱為 BCD 碼。接下來我們就看代碼是如何進行編寫的,需要多少位二進制數(shù)來進行編 碼。表 3 列舉了 1~4 位二進制數(shù)所能進行的編碼個數(shù),從中我們可以 知道,最少需要 4 位二進制數(shù)來進行編碼。
表 3 1~4 位二進制數(shù)所能進行的編碼個數(shù)
位數(shù) | 1 位二進制數(shù) | 2 位二進制數(shù) | 3 位二進制數(shù) | 4 位二進制數(shù) |
代碼 | 0 1 | 00 01 10 11 | 000 001 010 011 100 101 110 111 | 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 |
代碼數(shù)目 | 2 21 | 4 2 2 | 8 2 3 | 16 2 4 |
從表 3 中可以看到,有 N 位二進制數(shù),那么代碼的數(shù)量就是 2 N ,我們這里有 0~9 共計 10 個數(shù),需要
多少位呢?3 位二進制數(shù)有 8 個代碼,10 個數(shù)不夠分,4 位二進制數(shù)有 16 個代碼,還多了 6 個呢,我們怎 么辦?我們可以想,如果有 10 個人來你家作客,如果你恰好有 10 張椅子還算好說,可是如果我們的椅子 不是恰好 10 把呢,你是提供 8 把椅子讓 2 個客人站著還是提供 16 把椅子讓椅子有空余呢?自然是提供 16 把椅子。多出來的 6 把椅子就讓他空著吧。
我們在前面講了,代碼的編寫具有隨意性,也就是說你可以隨意的編寫你自己的代碼,我們有 16 個 代碼,給 10 個數(shù)進行編碼,那么有多少種編碼的方案呢?數(shù)學(xué)上問題就是從 16 個數(shù)里面取出 10 個數(shù)進行 全排列,計算的結(jié)果是大約有 10 億種。這 10 億種方案都是二——十進制代碼,不過我們不可能用那么 多,代碼的編寫雖然有隨意性,但我們進行編碼不是自己一個人用的,還需要和別人交流,那么編寫一個有 規(guī)律的和通用性的代碼是必須的。理論上有無限種可能,但實際我們只使用其中的幾種。那么我們常用的都 是哪種代碼呢?最常用的就是 8421BCD 碼了。這種編碼的每位都有一個權(quán)值,恰好與自然二進制數(shù)的前
10 個數(shù)據(jù)相同,即用 0000(0)~1001(9)來表示十進制數(shù)的 0~9,從高位到低位的權(quán)值分別是
8,4,2,1,所以就稱作 8421BCD 碼。在 8421BCD 碼中,每組二進制數(shù)各位按照加權(quán)系數(shù)展開便是它
所對應(yīng)的十進制數(shù)。如 8421BCD 碼的 0110 安權(quán)展開為
0110=0X8+1X4+1X2+0X1=6
所以 8421BCD 碼 0110 表示十進制數(shù) 6。 這里一定要注意代碼和我們前面講的十進制數(shù)轉(zhuǎn)換為二進制數(shù)相區(qū)別,對于同一個數(shù),兩種運算結(jié)果
是不一樣的,例如十進制數(shù) 12,如果轉(zhuǎn)換為對應(yīng)的二進制數(shù),那么結(jié)果是 1100 ,而如果轉(zhuǎn)換為
8421BCD 碼,那么結(jié)果為 0001 0010,也就是說,8421BCD 碼就是嚴(yán)格的按照一位十進制數(shù)對應(yīng)著 4 位二進制數(shù)來寫,2 位十進制數(shù),必然對應(yīng)著 8 位二進制數(shù),他們之間只有我們在進行 8421BCD 碼編寫的 時候給的對應(yīng)關(guān)系,12 和 0001 0010 沒有數(shù)值上的任何關(guān)系。
BCD 碼還有 5421 碼、余 3 碼等等,大家可以看看數(shù)字電子技術(shù)的教材,我不一一的講解了。
ASCII 碼
ASCII 碼(美國標(biāo)準(zhǔn)信息交換碼),適用于所有的拉丁文字母,被國際標(biāo)準(zhǔn)化組織(ISO)批準(zhǔn)為國 際標(biāo)準(zhǔn),稱為 ISO646 標(biāo)準(zhǔn)。我國相應(yīng)的國家標(biāo)準(zhǔn)是 GB1988-80(即《信息處理交換用的七位編碼字符 集》)。這里的 GB 讀作“guo biao”(國標(biāo))而不是兩個英文字母 ”G“ ”B“。ASCII 碼 規(guī)定了信息交換用的
128 個字符。每個字符用 b7b6b5b4b3b2b1 七位來標(biāo)識,通常最高位用 0 表示,使用 7 位二進制數(shù)來表 示所有的大寫和小寫字母,數(shù)字 0 到 9、標(biāo)點符號, 以及在美式英語中使用的特殊控制字符。表 4 是 7 位
的 ASCII 碼表。
表 4 7 位的 ASCII 碼表
對于 ASCII 碼,我們不要去記憶什么,只需要知道如何查看就好。
漢字編碼
GB 2312 是一個簡體中文字符集的中國國家標(biāo)準(zhǔn),全稱為《信息交換用漢字編碼字符集基本集》, 又稱為 GB0,由中國國家標(biāo)準(zhǔn)總局發(fā)布,1981 年 5 月 1 日實施。GB2312 編碼通行于中國大陸;新加坡 等地也采用此編碼。中國大陸幾乎所有的中文系統(tǒng)和國際化的軟件都支持 GB 2312。
GB 2312 標(biāo)準(zhǔn)共收錄 6763 個漢字,其中一級漢字 3755 個,二級漢字 3008 個;同時,GB
2312 收錄了包括拉丁字母、希臘字母、日文平假名及片假名字母、俄語西里爾字母在內(nèi)的 682 個全角字
符。
GB 2312 的出現(xiàn),基本滿足了漢字的計算機處理需要,它所收錄的漢字已經(jīng)覆蓋中國大陸
99.75%的使用頻率。
對于人名、古漢語等方面出現(xiàn)的罕用字,GB 2312 不能處理,這導(dǎo)致了后來 GBK 及 GB 18030 漢 字字符集的出現(xiàn)。
GB 2312 中對所收漢字進行了“分區(qū)”處理,每區(qū)含有 94 個漢字/符號。這種表示方式也稱為區(qū)位
碼。
01-09 區(qū)為特殊符號。
16-55 區(qū)為一級漢字,按拼音排序。
56-87 區(qū)為二級漢字,按部首/筆畫排序。
10-15 區(qū)及 88-94 區(qū)則未有編碼。
舉例來說,“啊”字是 GB2312 之中的第一個漢字,它的區(qū)位碼就是 1601。 對于漢字編碼,我們也不需要去管它,自然有計算機幫我們處理與之相關(guān)的問題,從信息處理的角度
來看,漢字處理也是非數(shù)值處理,和英文字母一樣,需進行編碼才能被計算機處理。 同樣的,今天我們在計算機中所看到的每一樣?xùn)|西,包括圖片、聲音、視頻等等都需要編碼,也只有
進行了編碼,我們才能在計算機中進行處理。我們的計算機不僅處理數(shù)值數(shù)據(jù),還要處理大量的非數(shù)值數(shù)
據(jù),而實際上,處理非數(shù)值數(shù)據(jù)要多的多。關(guān)于圖片、聲音、視頻等的編碼不是我今天的主題,請查閱相關(guān)
的專業(yè)書籍。
后記
上周有單片機課,講到了二進制數(shù),課堂上比較激動,下課后考慮到 09 級的學(xué)生在這個學(xué)期數(shù)電 、C 語言、單片機同時上課,對于二進制數(shù)可能會有理解上的難題,便決定把課堂上的講課思路寫下來,于是 就有了這篇文章。從上周四到現(xiàn)在,除開中間有其他的雜事,一共用了 2 天的時間寫完。主要講解了二進 制、十進制、十六進制的相互轉(zhuǎn)換,帶符號數(shù)的補碼表示方法,編碼的概念以及 8421BCD 碼,ASCII 碼, 簡單的介紹了漢字的編碼。對于八進制數(shù),進制轉(zhuǎn)換時小數(shù)的處理,因為我覺得這些不是最主要的,知道了十六進制數(shù)那么八進制數(shù)也就沒什么困難了,至于小數(shù)的進制轉(zhuǎn)換,原理和整數(shù)一樣,在后續(xù)的學(xué)習(xí)中很少使用,所以不講,上課的時候跟著老師聽一遍就會的。補碼運算,溢出沒有過多的講解,因為這部分理解上 有些困難,等這個學(xué)期結(jié)束了,再來看這兩個問題比較好。我在寫的時候就在不斷的思考如何講才能讓學(xué)生逐步的,遞進的理解,我是盡力的按照上課的時候講 課思路來寫的,語言也差不多是平時的用詞,沒有使用很正規(guī)的語法。有時候我發(fā)覺自己的思維有些跳躍,也不知道學(xué)生們能不能看懂這篇文章,如果有任何的問題,請告訴我。也歡迎你們把它分發(fā)到電子系其他班級同學(xué)那里,讓大家得到方便。本文章不希望被轉(zhuǎn)載,也不希望在沒有得到我同意的情況下被任何刊物發(fā)表以及網(wǎng)站轉(zhuǎn)載,但你可以 隨意的下載閱讀。除了大約 500 字是從百度上搜索得到以及圖片掃描了其他教材的外,其他的文字都是我 逐字逐句的敲進去的,請尊重我的版權(quán),下載后請保持原樣,不要作任何修改,版權(quán)屬于作者本人。
評論