?
0???題記 在學(xué)習(xí)計(jì)算機(jī)基礎(chǔ)或者是數(shù)字電子技術(shù)、微機(jī)原理、單片機(jī)、C 語言等課程的時(shí)候,都會(huì)講到一個(gè)概 念:二進(jìn)制數(shù)。就是這個(gè)二進(jìn)制數(shù)難倒了很多的英雄漢,上面羅列的這些課程我都教過,這些課程有一個(gè)共 同的知識(shí)點(diǎn)就是二進(jìn)制數(shù),十進(jìn)制數(shù),十六進(jìn)制數(shù),還有八進(jìn)制數(shù)以及他們的相互轉(zhuǎn)換,而對(duì)于電子類專業(yè) 的一門比較重要的課程--單片機(jī),更是要用到二進(jìn)制數(shù)和十六進(jìn)制數(shù)。故而每次我講課時(shí)都會(huì)盡量詳細(xì)的 給學(xué)生講解這些內(nèi)容。今天上午剛剛結(jié)束了兩個(gè)班的第一堂課,又勾起了我的回憶,讓我有一種把這部分知 識(shí)點(diǎn)寫下來的沖動(dòng),給那些剛剛開始學(xué)習(xí)數(shù)字電子技術(shù)、單片機(jī)、C 語言的學(xué)生們。以上是為這篇文章的來歷。 1???引子 ? 隨著電的使用,電器應(yīng)用越來越廣泛,人們對(duì)于電器的要求也越來越高,要求功能強(qiáng)大,還要智能 化,使用簡(jiǎn)單化,這些要求讓數(shù)字電子技術(shù)應(yīng)用范圍越來越廣泛,原先很多采用模擬電路的地方都被數(shù)字電 路取代了,特別是對(duì)于信號(hào)處理方面,隨著計(jì)算機(jī)科學(xué)與技術(shù)突飛猛進(jìn)地發(fā)展,用數(shù)字電路進(jìn)行信號(hào)處理的 優(yōu)勢(shì)也更加突出。信號(hào)處理的一般方法都是先將模擬信號(hào)按比例轉(zhuǎn)換成數(shù)字信號(hào),然后送到數(shù)字電路進(jìn)行處 理,最后再將處理結(jié)果根據(jù)需要轉(zhuǎn)換為相應(yīng)的模擬信號(hào)輸出。從一般的模擬信號(hào)到數(shù)字信號(hào),要經(jīng)過采樣、 量化、編碼,最終一個(gè)連續(xù)的模擬信號(hào)波形就變成了一串離散的、只有高低電平之分“0 1 0 1...”變化的數(shù) 字信號(hào)。自然界來的,或者通過傳感器轉(zhuǎn)化的主要是模擬信號(hào),那么為什么要多此一舉把它們變?yōu)閿?shù)字信號(hào) 呢?原因有以下幾點(diǎn): 一、模擬信號(hào)有無窮多種可能的波形,同一個(gè)波形稍微變化就成了另一種波形,而數(shù)字信號(hào)只有兩種波 形(高電平和低電平),這就為信號(hào)的接收與處理提供了方便。即,數(shù)字信號(hào)易于傳輸,抗干擾能力強(qiáng)。 二、模擬信號(hào)由于它的多變性極容易受到干擾,其中包括來自信道的和電子器件的干擾,模擬器件難以 保證高的精度(如放大器有飽和失真、截止失真、交越失真,集成電路難免有零點(diǎn)漂移)。而數(shù)字電路中有 限的波形種類保證了它具有極強(qiáng)的抗干擾性,受擾動(dòng)的波形只要不超過一定門限總能夠通過一些整形電路 (如斯密特門)恢復(fù)出來,從而保證了極高的準(zhǔn)確性和可信性,而且基于門電路、集成芯片所組成的數(shù)字電 路也簡(jiǎn)單可*、維護(hù)調(diào)度方便,很適合于信息的處理。特別是計(jì)算機(jī)科學(xué)技術(shù)發(fā)展后,很多模擬電路無法實(shí) 現(xiàn)的功能都可以在采用數(shù)字電路來實(shí)現(xiàn)。 而電子計(jì)算機(jī)的出現(xiàn),讓數(shù)字電子技術(shù)有了更廣闊的發(fā)展空間,也讓我們的生活更加的豐富。手機(jī)帶 給我們聯(lián)絡(luò)的方便,電腦帶給我們工作和娛樂以及學(xué)習(xí)的便利,天上的飛機(jī),路上的汽車,讓我們出行更加 方便,家中的空調(diào)冰箱洗衣機(jī)微波爐等讓我們生活更加舒適。在手機(jī)、電腦、飛機(jī)、汽車以及家電中都有一 塊或者多塊的微處理器在工作,而這些微處理器就是由數(shù)字電路構(gòu)成的。 2???? 0 和 1 的舞蹈 2.1????? 二進(jìn)制數(shù)的來歷 電,發(fā)明出來是為人類服務(wù)的,那么電路同樣的是為人們服務(wù)的,也就是說我們需要在電路中能夠幫 助我們做平時(shí)生活中的事情,這些事情應(yīng)該是我們不用電也可以來做的。舉個(gè)例子,譬如我們生活中的數(shù), 我們采用的是十進(jìn)制數(shù),今年是 2010 年,就是指從耶穌誕生之年到現(xiàn)在有 2010 年了,班上有 45 個(gè)人, 買了一條褲子花費(fèi) 368 元等等,那么在這些數(shù)字的背后隱藏著什么呢?我們都知道 1+1=2,但是陳景潤(rùn)花 費(fèi)了很大的功夫才證明,這說明即使我們看起來很平常的的事情也隱藏著一些我們不知道的因素,在這里我 們不是來討論 1+1=2 的,因?yàn)槲覀儾皇琼敇O的數(shù)學(xué)家,但關(guān)于十進(jìn)制數(shù),我們可以討論一下一些普通人都 有能力理解的東西。2010,45,368 這些數(shù)字給我們提供了 2 個(gè)信息,數(shù)碼和數(shù)位,2010 由三個(gè)數(shù)碼 0,1,2 構(gòu)成,45 由兩個(gè)數(shù)碼 4,5 構(gòu)成,368 由三個(gè)數(shù)碼 3,6,8 構(gòu)成,而且這些數(shù)碼的位置不一 樣,那么他們所代表的大小不一樣的,如圖 1:
圖中 10 就是基數(shù),而 ?103 、 102 、 101 、 100??? ?也就是 1000,100,10,1 就是權(quán)。所謂的權(quán),就是在 這個(gè)數(shù)中占的數(shù)值大小。也就是說 2010 中的“2"代表了 2 個(gè)“千”,45 中的”4"代表了 4 個(gè)“十”,而 368 中 的”8“代表了 8 個(gè)“一”,而且同一個(gè)數(shù)碼放在不同的位置上就代表了不同數(shù)值,如 555 中,三個(gè) 5 的權(quán)分別 100,10,1,那么第一個(gè) 5 代表的數(shù)值就是 5X100,第二個(gè) 5 代表的數(shù)值是 5X10,的三個(gè) 5 代表的數(shù) 值是 5X 1。采用這種方法,我們就可以用有限的數(shù)碼來表示無限的數(shù)據(jù)了。 總結(jié)一下,十進(jìn)制采用了 0,1,2,3,4,5,6,7,8,9 共 10 個(gè)數(shù)碼,基數(shù)是 10,進(jìn)行運(yùn)算 的時(shí)候,我們采用逢十進(jìn)一。 這是我們現(xiàn)實(shí)生活中需要用到的十進(jìn)制的一些情況,那么我們?cè)跀?shù)字電路中必然也要采用這種計(jì)數(shù)方 法,電路中傳輸?shù)木褪请妷汉?a href="http://wenjunhu.com/tags/電流/" target="_blank">電流,我們要用 10 種不同的狀態(tài)來表示這 10 個(gè)數(shù)碼有點(diǎn)困難。我們舉例來 說吧,譬如有一個(gè)電壓,0~5V ,那么我們就可以這樣來表示 0~9 這 10 個(gè)數(shù)碼,如表 1。 表 1 電壓和數(shù)碼之間的對(duì)應(yīng)關(guān)系
接下來就是要制造一個(gè)能夠精確的實(shí)現(xiàn) 0V,0.5V,1V,1.5V……4.5V 等各種電平的基本電路,但這一 件是非常困難的事情。兩個(gè)相鄰的電平只有 0.5V,電路受到干擾,電平偏移 0.5V,那么就變成另外一個(gè)數(shù) 據(jù)了,而要保證電平完全沒有漂移是不可能的,所以,十進(jìn)制數(shù)在電路中很難直接實(shí)現(xiàn)了。即使勉強(qiáng)實(shí)現(xiàn) 了,數(shù)據(jù)傳輸?shù)臅r(shí)候又遇到了更大的數(shù)據(jù)準(zhǔn)確性的問題,因?yàn)殡娖浇?jīng)過導(dǎo)線傳輸?shù)臅r(shí)候會(huì)變化,相鄰的兩個(gè) 電平很容易混淆。這種十進(jìn)制數(shù)在數(shù)字電路中是沒法直接實(shí)現(xiàn),更別說是在微處理器這種高頻電路中實(shí)現(xiàn) 了。這樣必然要另外想辦法了。而戈特弗里德·威廉·凡·萊布尼茨(Gottfried Wilhelm von Leibniz,1646 年 7 月 1 日~1716 年 11 月 14 日)在 18 世紀(jì)初提出的二進(jìn)制幫助人們解決了問題,雖然萊布尼茨受中 國(guó)的易經(jīng)八卦啟發(fā)而發(fā)明的二進(jìn)制數(shù)最初不是用來設(shè)計(jì)電路的,因?yàn)槟莻€(gè)時(shí)候人們才開始研究電的現(xiàn)象,電 燈,電池等都還沒有出現(xiàn)。但 20 世紀(jì)初人們制造出二極管、三極管、集成電路等的時(shí)候,卻把二進(jìn)制拿來 用于電路的設(shè)計(jì)。二進(jìn)制數(shù)因?yàn)橹挥袃蓚€(gè)數(shù) 0 和 1,狀態(tài)也只有兩種,在電路中實(shí)現(xiàn)起來就方便的多了,只 要一個(gè)高電平和低電平就可以,甚至說有電流和無電流、有電荷和無電荷都可以表示,這樣的話電路的實(shí)現(xiàn) 非常簡(jiǎn)單,而且這種電路也不容易受到干擾,抗干擾性好的多。還是以上面 0~5V 的一個(gè)電平來說明,看圖2。
從圖 2 中可以看到,我們可以認(rèn)為 0~1V 都是低電平,2.4V~5V 都是高電平,若假設(shè)低電平代表 0,高電 平代表 1,那么我們就實(shí)現(xiàn)了二進(jìn)制數(shù)了,這個(gè)電路簡(jiǎn)單,而且易與實(shí)現(xiàn),電平允許有一定的漂移,提高了 抗干擾能力,數(shù)據(jù)傳輸可*性高的多。所以數(shù)字電路中采用了二進(jìn)制數(shù)。 假若以高電平代表 1,低電平代表 0,則稱為正邏輯系統(tǒng),反之,以高電平代表 0,低電平代表 1, 則稱為負(fù)邏輯系統(tǒng),一般來說,我們采用正邏輯系統(tǒng)。 2.2 二進(jìn)制數(shù)與十進(jìn)制數(shù) 接下來我們就研究一下二進(jìn)制數(shù),注意了,下面我們純粹的研究二進(jìn)制數(shù),跟二進(jìn)制的數(shù)字電路實(shí)現(xiàn) 沒有任何的關(guān)系了。 借助于十進(jìn)制數(shù)的思路,我們的二進(jìn)制數(shù)有兩個(gè)數(shù)碼:0 和 1,基數(shù)是 2,進(jìn)行運(yùn)算的時(shí)候是逢二進(jìn) 一。舉例來說明,比如二進(jìn)制數(shù) 10110(注意,讀這個(gè)數(shù)據(jù)的時(shí)候只需要把每一位數(shù)據(jù)讀出來就可以了, 千萬不要采用十進(jìn)制數(shù)的讀法。即這個(gè)數(shù)讀作:一 零 一 一 零,而不是一萬零一百一 十,若按照十進(jìn)制數(shù) 的讀法,會(huì)讓別人笑話的。切記切記)。對(duì)于這個(gè)數(shù),我們知道它的每一位都有權(quán),而且權(quán)是 2 的冪,即 10110 = 1X24???? ?0X23???? ?1X22???? ?1X21???? ?0X20??? ?若我們把這些數(shù)字相加計(jì)算出數(shù)值來,就會(huì)發(fā)現(xiàn)它是一個(gè) 十進(jìn)制數(shù) 22,這樣我們就把一個(gè)二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)了。我們接下來就講二進(jìn)制數(shù)和十進(jìn)制數(shù)的相互 轉(zhuǎn)換問題。 隨便拿出一本教材來,關(guān)于二進(jìn)制數(shù)和十進(jìn)制數(shù)的相互轉(zhuǎn)換,都講了一個(gè)方法:二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn) 制數(shù)采用加權(quán)法,就是上面說的例子。而十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)則分為整數(shù)部分和小數(shù)部分分別轉(zhuǎn)換,整 數(shù)部分用除 2 取余法,小數(shù)部分采用乘 2 取整法,然后要列豎式來求解。一般來說,我們?cè)谶M(jìn)行應(yīng)用的時(shí) 候,譬如數(shù)字電路,單片機(jī)中使用的數(shù)字都是整數(shù),而且只需要我們快速的計(jì)算出這個(gè)數(shù)據(jù)即可,若按照除 2 取余法來求解,則太費(fèi)時(shí)間,這里我講一種方法,命名為“8421”法,可以快速的求解 255 以內(nèi)的數(shù)據(jù) (超過 255 的數(shù)據(jù)建議大家用計(jì)算器來求解,手算或者心算就太費(fèi)勁了。)。這個(gè)方法就是利用權(quán),一個(gè) 4 位的二進(jìn)制數(shù),它的每一位的權(quán)恰好是 8421,如圖 3。 128??? 64?? 32??? 16??? 8??? 4????? 2??? 1 圖 3? 二進(jìn)制數(shù)每一位的權(quán) 接下來我們就以一個(gè)具體的例子來說明這種方法的使用。先看二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)的例子,就是 上面說的 10110 吧,把它的每一位的權(quán)都標(biāo)出來,如圖 4。 16 8 4 2 1 1? 0 1 1 0 圖 4 二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)的例子 我們只要把數(shù)值是 1 的位的權(quán)加起來就可以得到對(duì)應(yīng)的十進(jìn)制數(shù),即 16+4+2=22,完全一樣。但是比列 式子快速的多了,如果熟悉了每一位的權(quán)之后我們都可以心算,快速的算出結(jié)果為 22。 接下來講十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)的例子,把十進(jìn)制數(shù) 55 轉(zhuǎn)換為二進(jìn)制數(shù)。開始運(yùn)算之前先把圖 3 畫在草稿紙上,然后開始填 1,首先,55 在 64 和 32 之間,所以 64 處不能是 1,我們?cè)?32 處寫 1,這個(gè) 1 的權(quán)是 32,那么我們還剩下 55-32=23,比 16 大,我們?cè)?16 的位置上寫 1,這時(shí)候我們還剩下 23- 16=7,接著我們就可以在 4、2 和 1 的位置上分別寫一個(gè) 1,32+16+4+2+1 恰好等于 55,所以我們?cè)?其他的位置上寫 0,把這個(gè)數(shù)寫出來 110111,就得到了轉(zhuǎn)換后的二進(jìn)制數(shù)了。整個(gè)過程如圖 5 所示。
? 采用這種方法可以快速的實(shí)現(xiàn)二進(jìn)制數(shù)和十進(jìn)制數(shù)的相互轉(zhuǎn)換,這里要提醒大家一點(diǎn)了,我們只需要練習(xí)十 進(jìn)制數(shù) 255 以內(nèi)的數(shù)據(jù)和二進(jìn)制數(shù)之間的相互轉(zhuǎn)換就可以了,太大的數(shù)據(jù)交給計(jì)算器來運(yùn)算就好了,千萬 不要為難自己,非要去計(jì)算 52369 的二進(jìn)制數(shù),那將讓你失去許多樂趣的。相對(duì)于二進(jìn)制數(shù)來說,我們只 要能計(jì)算 8 位以內(nèi)的二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)就可,超過 8 位的還是交給計(jì)算器吧。當(dāng)然了,每個(gè)人都有自 己的自由,如果某人要手工計(jì)算 32 位二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)或者把一個(gè)上億的十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制 數(shù),我也沒有辦法。 在現(xiàn)實(shí)生活中,對(duì)于十進(jìn)制數(shù),我們自動(dòng)的根據(jù)數(shù)據(jù)的大小調(diào)整數(shù)位,15 有兩位有效數(shù)字,那么我 們寫 15 就好,那么沒有人會(huì)寫成 00015 的,同樣的 369 有三位有效數(shù)字,也沒人會(huì)寫成 00369,因?yàn)?在數(shù)字的前面加 0 不改變大小,所以我們通常是省略前面的 0。但在數(shù)字電路中有另外一種情況,譬如我們 制造好了一個(gè)電路后,能表示 8 位二進(jìn)制數(shù),那么就必須制造 8 個(gè)基本元件,每個(gè)基本元件存儲(chǔ)一個(gè)二進(jìn)制 數(shù),那么表示任何一個(gè)數(shù),都是這 8 個(gè)基本元件作為一個(gè)整體來表示的,這樣就會(huì)遇到多余的 0,如表示十 進(jìn)制數(shù) 30,那么就是 00011110,前面的 0 你不能省略,因?yàn)槟悴荒苷f最前面的 3 個(gè)元件不存儲(chǔ)數(shù)據(jù)了, 再者,電路造好之后你也不能隨便的用刀砍掉一部分。所以,在我們數(shù)字電路以及單片機(jī)課程中,一般遇到 的二進(jìn)制都是位數(shù)固定的,我們?cè)趯戇@些數(shù)據(jù)的時(shí)候一定不要省略前面的 0,那么這個(gè)固定的位數(shù)是多少呢? 8 的倍數(shù),也就是說,一般來說都是 8 位數(shù)一組,或者是 16 位,32 位,64 位,128 位等。 針對(duì)單片機(jī)中二進(jìn)制位數(shù)固定這一特點(diǎn),這里有幾個(gè)名詞:位(bit),字節(jié)(Byte),字 (Word)。其中位就是二進(jìn)制位,1 位就是一個(gè)二進(jìn)制位,稱為 1bit,簡(jiǎn)寫 1b,1 字節(jié)代表 8 個(gè)二進(jìn)制的 位,1Byte=8bit ,1 字代表 2 個(gè)字節(jié),1Word=2Byte。Byte 可以簡(jiǎn)寫作 B,我們可以得到如下公式: 1B=8b,1Word=2B=16b 隨著計(jì)算機(jī)技術(shù)的發(fā)展,數(shù)據(jù)越來越多,我們還有幾個(gè)單位,KB,MB,GB,TB,其關(guān)系為: 1KB=1024B= 210 B 1MB=1024KB= 220 B 1GB=1024MB= 230 B 1TB=1024GB=2 40 B 2.3 十六進(jìn)制數(shù)出世 數(shù)字電路中都用二進(jìn)制數(shù),計(jì)算機(jī)中當(dāng)然也用二進(jìn)制數(shù),而我們要與這些電路打交道,必然要會(huì)二進(jìn) 制數(shù),大家看看以下這幾個(gè)二進(jìn)制數(shù),然后抄一遍: 第一個(gè)數(shù):00001101 第二個(gè)數(shù):0101001110011010 的三個(gè)數(shù):11100101011100110011001011101111 第四個(gè)數(shù): 1101010001111000001110110110111011100110000011100100010010011100 第一個(gè)數(shù)是 8 位,寫下來沒什么太大的關(guān)系,第二個(gè)數(shù)是 16 位,仔細(xì)的看一下,抄寫也可以,第三個(gè)是32位,我想可能要非常吃力的才能寫下來,也許還要多次才能正確的抄寫下來,那么最后一個(gè) 64 位的,有人有勇氣面對(duì)它嗎?如果是寫滿了 0 和 1 的 20 張 A4 的紙呢,任是誰也會(huì)崩潰的,太苦惱了,如果每天都是 看到的都是這些數(shù)字,也只有神仙才可以做得到了。這還不算,怕的就是出錯(cuò)了,滿目都是 0 和 1,稍微錯(cuò) 了一位,面目全非了,所有的工作就要重新來過。有人會(huì)說,我直接轉(zhuǎn)換成 10 進(jìn)制數(shù)來讀寫好了。但是二 進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)太繁瑣,誰能告訴我最后一個(gè)數(shù)對(duì)應(yīng)的十進(jìn)制數(shù)是多少呢? 二進(jìn)制數(shù)難讀,難寫,數(shù)據(jù)位數(shù)多,寫和讀都不方便,而我們卻不能不看,不能不用,因?yàn)槲覀儾荒?/p> 不用數(shù)字電路,也不能不用計(jì)算機(jī)。當(dāng)問題出現(xiàn)了,我們就要解決它,于是出現(xiàn)了十六進(jìn)制。 十六進(jìn)制有十六個(gè)數(shù)碼:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F(xiàn),基數(shù)是 16, 運(yùn)算時(shí)逢十六進(jìn)一。為什么說十六進(jìn)制數(shù)解決了二進(jìn)制數(shù)讀寫困難,也沒有十進(jìn)制數(shù)轉(zhuǎn)換繁瑣的困局呢?因 為十六進(jìn)制和二進(jìn)制數(shù)相互轉(zhuǎn)換非常簡(jiǎn)單,4 位二進(jìn)制數(shù)對(duì)應(yīng)于一位十六進(jìn)制數(shù),這樣就可以把上述冗長(zhǎng)的 二進(jìn)制數(shù)轉(zhuǎn)換為十六進(jìn)制數(shù)。上面四個(gè)二進(jìn)制數(shù)轉(zhuǎn)換為十六進(jìn)制數(shù)為: 第一個(gè)數(shù):0D 第二個(gè)數(shù):539A 的三個(gè)數(shù):E57332EF 第四個(gè)數(shù):D4783B6EE60E449C 當(dāng)你看到上面這組數(shù)據(jù)的時(shí)候,讀和寫的時(shí)候要輕松的多了吧,這樣我們被前面二進(jìn)制數(shù)打擊的信心 又回來了。那么你一定迫切的想知道二進(jìn)制數(shù)和十六進(jìn)制數(shù)是如何轉(zhuǎn)換的吧。好吧,我們就來講二進(jìn)制數(shù)和 十六進(jìn)制數(shù)的轉(zhuǎn)換。 二進(jìn)制數(shù)轉(zhuǎn)換為十六進(jìn)制數(shù):4 位一組,分別轉(zhuǎn)換; 十六進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù):1 位轉(zhuǎn)換為 4 位,原序排列。 在進(jìn)行學(xué)習(xí)二進(jìn)制數(shù)和十六進(jìn)制數(shù)轉(zhuǎn)換之前,先看一個(gè)表格, 表 2 十進(jìn)制數(shù)、二進(jìn)制數(shù)、十六進(jìn)制數(shù)的對(duì)應(yīng)關(guān)系
我們只要對(duì)照這個(gè)表格,就可以很輕松的進(jìn)行二進(jìn)制數(shù)和十六進(jìn)制數(shù)的轉(zhuǎn)換了。下面用具體的例子來說明。 例 1 把二進(jìn)制數(shù) 1011 0110 轉(zhuǎn)換為十六進(jìn)制數(shù) 首先把二進(jìn)制數(shù)分組 1011??? 0110 B?????? 6 則二進(jìn)制數(shù) 10110110 轉(zhuǎn)換為十六進(jìn)制數(shù)就是 B6 了。更多的位數(shù)一樣的轉(zhuǎn)換。 例 2 把二進(jìn)制數(shù) 1110 1100 0111 0010 轉(zhuǎn)換為十六進(jìn)制數(shù) 把二進(jìn)制數(shù)分組 1110???????? 1100?????????? 0111?????????? 0010 E???? C?????? 7????? 2 轉(zhuǎn)換的結(jié)果為十六進(jìn)制數(shù) EC72 反過來,十六進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)則反過來,直接一位變?yōu)?4 位就可以了。例如把十六進(jìn)制數(shù) A157 轉(zhuǎn)換為二進(jìn)制數(shù),則 A???? 1????? 5???? 7 1010?? 0001?? 0101?? 0111 轉(zhuǎn)換后的結(jié)果就是 1010 0001 0101 0111。 正因?yàn)槭M(jìn)制數(shù)和二進(jìn)制數(shù)的相互轉(zhuǎn)換不需要進(jìn)行計(jì)算,只是簡(jiǎn)單的替換就可以,所以我們?cè)诤芏?場(chǎng)合下經(jīng)常用十六進(jìn)制數(shù)來代替二進(jìn)制數(shù),在學(xué)習(xí)單片機(jī)課程的時(shí)候,經(jīng)常遇到十六進(jìn)制數(shù),所以必須掌握 十六進(jìn)制數(shù)和二進(jìn)制數(shù)的相互轉(zhuǎn)換,而且要能熟練的轉(zhuǎn)換。針對(duì)表 2,我建議大家就用 8421 法來記憶,數(shù) 字都很小,即使記不住,臨時(shí)來計(jì)算也很快的。 二進(jìn)制數(shù)和十六進(jìn)制數(shù)能夠相互轉(zhuǎn)換,那么十進(jìn)制數(shù)和十六進(jìn)制數(shù)的相互轉(zhuǎn)換怎么做呢?十進(jìn)制數(shù)和 十六進(jìn)制數(shù)可以直接相互轉(zhuǎn)換,也可以用加權(quán)法,十六進(jìn)制數(shù)的每一位的權(quán)是 1,16,256,4096……數(shù) 據(jù)運(yùn)算量比較大,所以我們就簡(jiǎn)單的計(jì)算一下 2 位的十六進(jìn)制數(shù)和十進(jìn)制數(shù)的相互轉(zhuǎn)換,太大的數(shù)據(jù)就不要 為難自己了,用計(jì)算器吧。我的方法是先轉(zhuǎn)換為二進(jìn)制數(shù),然后再把二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù),這樣手算的 速度要快些。反過來,要把十進(jìn)制數(shù)轉(zhuǎn)換為十六進(jìn)制數(shù),也是先把十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù),然后在轉(zhuǎn)換為 十六進(jìn)制數(shù)。 我們現(xiàn)實(shí)生活中使用十進(jìn)制數(shù),而計(jì)算機(jī)中使用二進(jìn)制數(shù),為了讀寫的方便,我們發(fā)明了十六進(jìn)制 數(shù),并且通過上面的學(xué)習(xí)我們也知道了如何快速的在這三種進(jìn)制數(shù)據(jù)之間相互轉(zhuǎn)換,應(yīng)該沒有上面太大的問 題了。但是還有一個(gè)問題,大家再看一看表 2,二進(jìn)制、十進(jìn)制、十六進(jìn)制數(shù)據(jù)他們的數(shù)碼,你會(huì)發(fā)現(xiàn)數(shù)碼 有重合的部分,這就有問題了,如果出現(xiàn)了一個(gè)數(shù)據(jù),如何知道是那種進(jìn)制的數(shù)據(jù)呢?如 1110,145,562??赡苡腥藭?huì)說,第一個(gè)數(shù)是二進(jìn)制數(shù),第二個(gè)和第三個(gè)數(shù)據(jù)是十進(jìn)制數(shù)。但這是錯(cuò)誤 的。就如一件衣服 200 元,如果在重慶,那么就是 200 人民幣,如果是在香港買的,那么就是 200 港元, 如果你跑到英國(guó)去買,那么可能會(huì)是 200 英鎊或者 200 歐元了,這可是不一樣的,而且差別很大。這個(gè)時(shí) 候你再來看看 1110 和 145 這兩個(gè)數(shù),到底是什么進(jìn)制的數(shù)據(jù)呢?不知道,除非做了說明。這就是我要講 的另外一個(gè)問題,對(duì)于任何一個(gè)數(shù)字,我們必須作出說明是什么進(jìn)制數(shù)據(jù)才有意義,否則我們不知道它的真 實(shí)大小。那么如何來區(qū)分這三種進(jìn)制的數(shù)據(jù)呢?我們采用在數(shù)字的末尾加一個(gè)字母來表示。 二進(jìn)制的英文單詞是 Binary,十進(jìn)制的英文單詞是 Decimal,十六進(jìn)制的英文單詞是 Hexadecimal,所以我們就在二進(jìn)制數(shù)后面加字母 B ,在十進(jìn)制數(shù)后面加字母 D ,在十六進(jìn)制數(shù)后面加字 母 H,這樣就可以區(qū)分這三種進(jìn)制的數(shù)據(jù)了。如 1010B,145D,562H 等等。因?yàn)槲覀儸F(xiàn)實(shí)生活中用的最 多的是十進(jìn)制數(shù),所以十進(jìn)制數(shù)后的字母 D 可以省略,直接寫 145,就如我們?cè)谥袊?guó)買東西,標(biāo)價(jià)是 200 的話默認(rèn)單位就是人民幣了,但二進(jìn)制數(shù)和十六進(jìn)制數(shù)后的字母不能省略。 2.4? 負(fù)號(hào)的解決之道 以上在討論數(shù)值的時(shí)候都只考慮了正數(shù)的情況,其實(shí)我們還使用負(fù)數(shù)以及小數(shù),鑒于小數(shù)在我們課程 的學(xué)習(xí)階段用的不是很多,特別是 9051 單片機(jī),對(duì)于小數(shù)的運(yùn)算非常不擅長(zhǎng),所以也就很少用到了,自然 不會(huì)講太多。接下來我們就僅討論負(fù)數(shù)的問題。 在數(shù)學(xué)運(yùn)算中,表示一個(gè)數(shù)的正負(fù),我們?cè)跀?shù)據(jù)的前面加上一個(gè) 正號(hào)或者負(fù)號(hào)(+/-),但是在計(jì)算 機(jī)中,對(duì)于這個(gè)正負(fù)號(hào)的表示就有點(diǎn)問題了,計(jì)算機(jī)中只能使用 0 和 1,沒法使用+ -,那么我們?nèi)绾伪硎?一個(gè)數(shù)值的正負(fù)呢?方法是用 0 和 1 來表示正負(fù)號(hào)。正常的情況下,我們用 0 來表示正號(hào),1 來表示負(fù)號(hào)。 這樣,我們對(duì)于一個(gè)數(shù)值就有兩部分構(gòu)成,符號(hào)位和數(shù)值位,符號(hào)位用 0 和 1 來表示正負(fù),數(shù)值位表示大 小。計(jì)算機(jī)中的數(shù)值有很多,為了防止符號(hào)位和數(shù)值位不對(duì)應(yīng),我們一般把符號(hào)位和數(shù)值位作為一個(gè)整體來 處理。前面我們講過,在計(jì)算機(jī)中經(jīng)常用到的單位是 Byte,有 8bit,我們就把最高位作為符號(hào)位,其他的 7 位作為數(shù)值位。如圖 6。 ?D7?? D6???? D5??? D4???? D3??? D2???? D1??? D0 符號(hào)位??? 數(shù)值位 0?? 正數(shù) 1? 負(fù)數(shù) 圖 6? 符號(hào)位和數(shù)值位 這樣我們就可以用二進(jìn)制數(shù)來表示負(fù)數(shù)了。如 +10=0000 1010B -10=1000 1010B 這樣我們就不怕負(fù)數(shù)了。我們來計(jì)算一下+10 + (-10)的結(jié)果。在計(jì)算機(jī)中,+10 和-10 我們已經(jīng)轉(zhuǎn)化 為二進(jìn)制數(shù)了,這里直接列豎式相加就可以了 0000 1010 +? 1000 1010 ———————————— 1001 0100 為什么結(jié)果不是 0?難道+10 +(-10)不等于 0?答案肯定是 0 的,絕對(duì)是二進(jìn)制數(shù)運(yùn)算出錯(cuò),可是錯(cuò)誤 在哪里呢?大家思考一下數(shù)學(xué)中對(duì)于兩個(gè)數(shù)據(jù)相加是如何做的?首先是比較兩個(gè)數(shù)的符號(hào),如果符號(hào)相同, 那么兩個(gè)數(shù)值相加,符號(hào)不變,而如果兩個(gè)數(shù)值符號(hào)不同,則比較一下哪個(gè)數(shù)值大,用數(shù)值較大的減去數(shù)值 較小的,符號(hào)用數(shù)值較大的符號(hào)。也就是說,我們數(shù)學(xué)上計(jì)算的時(shí)候是分情況的,而在上面的式子中,我們 把符號(hào)也參與運(yùn)算了,并沒有比較兩個(gè)數(shù)的數(shù)值大小。 問題出現(xiàn)了,那么就要解決它。計(jì)算機(jī)的先驅(qū)者們發(fā)現(xiàn),若按照我們數(shù)學(xué)上的處理方法,則實(shí)現(xiàn)的電 路很復(fù)雜,便采取了另外一種方法,符號(hào)可以參與運(yùn)算,而且結(jié)果也可以是正確的,這便是補(bǔ)碼表示。講補(bǔ) 碼的時(shí)候涉及到幾個(gè)概念:原碼,反碼,補(bǔ)碼。 原碼 最高位表示符號(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,可能有人說了,不是最前面有個(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è)溢出的問題,大家可以試著用補(bǔ)碼來計(jì)算一下 -98+(-50),你會(huì)發(fā)現(xiàn)得到 了一個(gè)最高位是 0 的八位數(shù),也就是說,變成了一個(gè)正數(shù)。這就是超出了數(shù)據(jù)范圍,產(chǎn)生了溢出。關(guān)于溢 出,因?yàn)椴皇侵攸c(diǎn),大家可以自己查書找到答案。 3?????? 萬物歸于陰陽 《易傳》記錄“易有太極,始生兩儀。兩儀生四象,四象生八卦。"這里所說的兩儀,就是陰和陽。這 里所說的卦,是宇宙間的現(xiàn)象,是我們?nèi)庋劭梢钥匆姷默F(xiàn)象,宇宙間共有八個(gè)基本的大現(xiàn)象,而宇宙間的萬 有、萬事、萬物,皆依這八個(gè)現(xiàn)象而變化,這就是八卦法則的起源。而八卦的來源就是陰陽。 我國(guó)古代人們 發(fā)明的太極八卦用陰陽能夠代表世間萬物,那么由 0 和 1 組成的二進(jìn)制數(shù)自然能夠表示世間所有東西,而不 僅僅是幾個(gè)數(shù)字。也就是說我們現(xiàn)實(shí)生活中的圖形、圖像、聲音、文字、色彩等等,都可以用二進(jìn)制數(shù)表 示,當(dāng)然也可以在計(jì)算機(jī)中處理和顯示出來。其實(shí)這個(gè)做到了的,否則我們今天也就不會(huì)有電腦里的圖片、 音樂、視頻、文字等等,我們今天的世界將不會(huì)這么多姿多彩。 那么,單純的 0 和 1 如何表示世間的萬物呢?這里要講到一個(gè)詞:代碼。代碼,從字面意思來看, 就是代替的碼字,即我們找一組二進(jìn)制數(shù)來代替,代替誰呢?代替世間的萬物。到這里可能有人會(huì)有疑問 了?既然是代替的,必然不是真的,有什么用呢?自然有用,要是沒用的話我們不會(huì)隨時(shí)隨地的使用。其實(shí) 我們就是生活在一個(gè)代碼的世界里,如我們的名字就是一個(gè)代碼,用漢字給我們每個(gè)人的一個(gè)代碼,代表一 個(gè)個(gè)體。在學(xué)校里,每個(gè)學(xué)生都有一個(gè)學(xué)號(hào),而這個(gè)學(xué)號(hào)就是一個(gè)代碼,用一組十進(jìn)制數(shù)來代表一個(gè)學(xué)生。 甚至我們所說的課桌,操場(chǎng)等等名詞都是代碼,用漢字來代表某個(gè)物體或者某種意義。代碼到底有什么好處 呢?方便于我們的溝通和交流。還是以我們的名字為例來說。如果一個(gè)人叫“張三”,那么我們有事情要找 他,那么就喊“張三”,叫張三的人就答應(yīng)了,于是你可以跟他交流了。合同上要雙方簽字,而就是簽的名 字,合同簽完后就可以存檔了,不管經(jīng)過多久,其他人看到這個(gè)簽字,就知道這是經(jīng)過雙方本人認(rèn)可了的, 而不需要雙方兩個(gè)大活人親自告訴你說,這個(gè)合同我認(rèn)可了的,因?yàn)槊志痛砹似浔救?。如果我們不用?碼,那么一個(gè)合同文本上必須有兩個(gè)人站在那里,證明合同雙方都同意的,這是一件和荒唐的事情,文件柜 里站著兩個(gè)大活人不是很滑稽和不可能的事情嗎?所以,我們使用代碼。注意的是代碼就是代碼,不是人本 身,你的名字不等于你這個(gè)人本身,它僅僅代表你這個(gè)人,我們不能說幾個(gè)漢字和活生生的人是一樣的吧。 每個(gè)人都有血有肉,有情感,但是漢字只是一些筆跡,不會(huì)有血肉。 代碼,有任意性,就是我們可以用任何的東西來代表某個(gè)含義,如漢字里的“桌子”和英語里 的“desk“都是代表了同一種東西。這也表示這我們可以用隨意的什么來代表我們每個(gè)人,我們的名字是漢 字,兩個(gè)或者三個(gè)或者四個(gè)漢字,當(dāng)然,我們也可以用數(shù)字來代表我們每個(gè)人,比如監(jiān)獄里每個(gè)囚犯都有一 個(gè)編號(hào),這個(gè)編號(hào)就是用十進(jìn)制數(shù)來給每個(gè)人的代碼。雖然代碼有隨意性,但是我們一般不會(huì)隨意的進(jìn)行編 寫代碼,而是按照某種規(guī)律來編碼,因?yàn)橛幸?guī)律的代碼使我們的維護(hù)更加方便。我們每個(gè)人的身份證就是一 個(gè)代碼,是很有規(guī)律的,不知道有沒有注意到這個(gè)規(guī)律。 代碼就是用碼字來代替,我們編寫代碼的過程叫做編碼,有時(shí)候也稱代碼為編碼。我們可以用 0 和 1 的二進(jìn)制數(shù)按照某種規(guī)律排列起來代表任何一個(gè)事物,下面講幾種常用的代碼。 二——十進(jìn)制代碼 二——十進(jìn)制代碼就是用二進(jìn)制數(shù)對(duì)十進(jìn)制數(shù)編寫代碼,也就是說用 0 和 1 來給十進(jìn)制數(shù)的 10 個(gè)數(shù) 碼 0~9 進(jìn)行編碼,也稱為 BCD 碼。接下來我們就看代碼是如何進(jìn)行編寫的,需要多少位二進(jìn)制數(shù)來進(jìn)行編 碼。表 3 列舉了 1~4 位二進(jìn)制數(shù)所能進(jìn)行的編碼個(gè)數(shù),從中我們可以 知道,最少需要 4 位二進(jìn)制數(shù)來進(jìn)行編碼。 表 3?? 1~4 位二進(jìn)制數(shù)所能進(jìn)行的編碼個(gè)數(shù)
從表 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è)人來你家作客,如果你恰好有 10 張椅子還算好說,可是如果我們的椅子 不是恰好 10 把呢,你是提供 8 把椅子讓 2 個(gè)客人站著還是提供 16 把椅子讓椅子有空余呢?自然是提供 16 把椅子。多出來的 6 把椅子就讓他空著吧。 我們?cè)谇懊嬷v了,代碼的編寫具有隨意性,也就是說你可以隨意的編寫你自己的代碼,我們有 16 個(gè) 代碼,給 10 個(gè)數(shù)進(jìn)行編碼,那么有多少種編碼的方案呢?數(shù)學(xué)上問題就是從 16 個(gè)數(shù)里面取出 10 個(gè)數(shù)進(jìn)行 全排列,計(jì)算的結(jié)果是大約有 10 億種。這 10 億種方案都是二——十進(jìn)制代碼,不過我們不可能用那么 多,代碼的編寫雖然有隨意性,但我們進(jìn)行編碼不是自己一個(gè)人用的,還需要和別人交流,那么編寫一個(gè)有 規(guī)律的和通用性的代碼是必須的。理論上有無限種可能,但實(shí)際我們只使用其中的幾種。那么我們常用的都 是哪種代碼呢?最常用的就是 8421BCD 碼了。這種編碼的每位都有一個(gè)權(quán)值,恰好與自然二進(jìn)制數(shù)的前 10 個(gè)數(shù)據(jù)相同,即用 0000(0)~1001(9)來表示十進(jìn)制數(shù)的 0~9,從高位到低位的權(quán)值分別是
8,4,2,1,所以就稱作 8421BCD 碼。在 8421BCD 碼中,每組二進(jìn)制數(shù)各位按照加權(quán)系數(shù)展開便是它 所對(duì)應(yīng)的十進(jìn)制數(shù)。如 8421BCD 碼的 0110 安權(quán)展開為 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,也就是說,8421BCD 碼就是嚴(yán)格的按照一位十進(jìn)制數(shù)對(duì)應(yīng)著 4 位二進(jìn)制數(shù)來寫,2 位十進(jìn)制數(shù),必然對(duì)應(yīng)著 8 位二進(jìn)制數(shù),他們之間只有我們?cè)谶M(jìn)行 8421BCD 碼編寫的 時(shí)候給的對(duì)應(yīng)關(guān)系,12 和 0001 0010 沒有數(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 七位來標(biāo)識(shí),通常最高位用 0 表示,使用 7 位二進(jìn)制數(shù)來表 示所有的大寫和小寫字母,數(shù)字 0 到 9、標(biāo)點(diǎn)符號(hào), 以及在美式英語中使用的特殊控制字符。表 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 收錄了包括拉丁字母、希臘字母、日文平假名及片假名字母、俄語西里爾字母在內(nèi)的 682 個(gè)全角字 符。 GB 2312 的出現(xiàn),基本滿足了漢字的計(jì)算機(jī)處理需要,它所收錄的漢字已經(jīng)覆蓋中國(guó)大陸 99.75%的使用頻率。 對(duì)于人名、古漢語等方面出現(xiàn)的罕用字,GB 2312 不能處理,這導(dǎo)致了后來 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í)漢字,按部首/筆畫排序。 10-15 區(qū)及 88-94 區(qū)則未有編碼。 舉例來說,“啊”字是 GB2312 之中的第一個(gè)漢字,它的區(qū)位碼就是 1601。 對(duì)于漢字編碼,我們也不需要去管它,自然有計(jì)算機(jī)幫我們處理與之相關(guān)的問題,從信息處理的角度 來看,漢字處理也是非數(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è)書籍。 后記 ?? 上周有單片機(jī)課,講到了二進(jìn)制數(shù),課堂上比較激動(dòng),下課后考慮到 09 級(jí)的學(xué)生在這個(gè)學(xué)期數(shù)電 、C 語言、單片機(jī)同時(shí)上課,對(duì)于二進(jìn)制數(shù)可能會(huì)有理解上的難題,便決定把課堂上的講課思路寫下來,于是 就有了這篇文章。從上周四到現(xiàn)在,除開中間有其他的雜事,一共用了 2 天的時(shí)間寫完。主要講解了二進(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得這些不是最主要的,知道了十六進(jìn)制數(shù)那么八進(jìn)制數(shù)也就沒什么困難了,至于小數(shù)的進(jìn)制轉(zhuǎn)換,原理和整數(shù)一樣,在后續(xù)的學(xué)習(xí)中很少使用,所以不講,上課的時(shí)候跟著老師聽一遍就會(huì)的。補(bǔ)碼運(yùn)算,溢出沒有過多的講解,因?yàn)檫@部分理解上 有些困難,等這個(gè)學(xué)期結(jié)束了,再來看這兩個(gè)問題比較好。我在寫的時(shí)候就在不斷的思考如何講才能讓學(xué)生逐步的,遞進(jìn)的理解,我是盡力的按照上課的時(shí)候講 課思路來寫的,語言也差不多是平時(shí)的用詞,沒有使用很正規(guī)的語法。有時(shí)候我發(fā)覺自己的思維有些跳躍,也不知道學(xué)生們能不能看懂這篇文章,如果有任何的問題,請(qǐng)告訴我。也歡迎你們把它分發(fā)到電子系其他班級(jí)同學(xué)那里,讓大家得到方便。本文章不希望被轉(zhuǎn)載,也不希望在沒有得到我同意的情況下被任何刊物發(fā)表以及網(wǎng)站轉(zhuǎn)載,但你可以 隨意的下載閱讀。除了大約 500 字是從百度上搜索得到以及圖片掃描了其他教材的外,其他的文字都是我 逐字逐句的敲進(jìn)去的,請(qǐng)尊重我的版權(quán),下載后請(qǐng)保持原樣,不要作任何修改,版權(quán)屬于作者本人。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
?
評(píng)論
查看更多