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