第一章 數(shù)制和碼制
1.1 概述
數(shù)制:多位數(shù)碼中每一位的構(gòu)成方法和從低位到高位的進(jìn)位規(guī)則稱(chēng)為數(shù)制。
碼制:為了便于記憶和查找,在編制代碼時(shí)總要遵循一定的規(guī)則,這些規(guī)則就稱(chēng)為碼制。
1.2 幾種常用的數(shù)制
十進(jìn)制(D)、二進(jìn)制(B)、八進(jìn)制(O)、十六進(jìn)制(H)...

1.3 不同數(shù)制間的轉(zhuǎn)換
(1) 二 - 十六轉(zhuǎn)換與二 - 八轉(zhuǎn)換
二 - 十六轉(zhuǎn)換:由于4位二進(jìn)制數(shù)恰好有16個(gè)狀態(tài),而把這4位二進(jìn)制數(shù)看作一個(gè)整體時(shí),它的進(jìn)位輸出又恰好是逢十六進(jìn)一,所以只要從低位到高位將整數(shù)部分每4位二進(jìn)制數(shù)分為一組,同時(shí)從高位到低位將小數(shù)部分的每4位數(shù)分為一組,并將每一組代換為等值的十六進(jìn)制數(shù)即可得到對(duì)應(yīng)的十六進(jìn)制數(shù)。
注意:分組位數(shù)不夠時(shí)需補(bǔ)零,整數(shù)前補(bǔ),小數(shù)后補(bǔ)(實(shí)際上是保證值不變)
????例如:(1100011 . 11)可以先補(bǔ)零為(0110 0011 . 1100)

二 - 八轉(zhuǎn)換與二 -?十六轉(zhuǎn)換同理,只需改為 “將3位二進(jìn)制數(shù)” 分為一組即可。

(2) 十六 - 二轉(zhuǎn)換和八 - 二轉(zhuǎn)換
十六 - 二轉(zhuǎn)換實(shí)際上是二?-?十六轉(zhuǎn)換的逆過(guò)程,只需要將每位十六進(jìn)制數(shù)代換成等值的4位二進(jìn)制數(shù)即可,相對(duì)簡(jiǎn)單。

八 - 二轉(zhuǎn)換同理,將每位八進(jìn)制數(shù)代換成等值的3位二進(jìn)制數(shù)即可。

(3) 二?- 十轉(zhuǎn)換、八 - 十轉(zhuǎn)換、 十六 - 十進(jìn)制轉(zhuǎn)換
這三種轉(zhuǎn)換都是其他數(shù)制向十進(jìn)制數(shù)的轉(zhuǎn)換,只需要根據(jù)1.2所示展開(kāi)式計(jì)算即可。

(4) 十 - 二轉(zhuǎn)換、 十 - 八轉(zhuǎn)換、 十 - 十六轉(zhuǎn)換
在(1)中,已經(jīng)掌握了二進(jìn)制向八進(jìn)制和十六進(jìn)制的轉(zhuǎn)換方式,所以這三種轉(zhuǎn)換實(shí)際上只需要學(xué)會(huì)十 - 二轉(zhuǎn)換即可,如果需要實(shí)現(xiàn)十 - 十六轉(zhuǎn)換,可以考慮十 - 二 - 十六的轉(zhuǎn)換過(guò)程。
十 - 二轉(zhuǎn)換可以分為整數(shù)部分的轉(zhuǎn)換和小數(shù)部分的轉(zhuǎn)換兩個(gè)步驟:
①整數(shù)部分的轉(zhuǎn)換:
這里介紹定位減權(quán)法,這是個(gè)人認(rèn)為十 - 二轉(zhuǎn)換許多方法中最基本也最容易上手的方法。

“ 以173為例,比173小且與其最近的是128,則128對(duì)應(yīng)位上取1,173 - 128 = 45,比128小一位的是64,45 < 64,則64對(duì)應(yīng)位上取0,比64小一位的是32,45 > 32,則32對(duì)應(yīng)位上取1,45 - 32 = 13,比32小一位的是16,13 < 16,則16對(duì)應(yīng)位上取0... 可以得出十進(jìn)制數(shù)173所對(duì)應(yīng)的二進(jìn)制數(shù)為10101101。”
上述過(guò)程實(shí)際上是把173分成128 + 32 + 8 + 4 + 1,初次接觸這個(gè)思路可能會(huì)覺(jué)得不如除基取余法方便,但在我自己學(xué)習(xí)的過(guò)程中,我發(fā)現(xiàn)了定位減權(quán)法的優(yōu)點(diǎn),他是從高位往低位出結(jié)果的、便于對(duì)結(jié)果進(jìn)行記錄,而且在經(jīng)常接觸二進(jìn)制數(shù)的情況下,二進(jìn)制位權(quán)對(duì)應(yīng)值實(shí)際上是很清晰的不需要刻意去記憶的。
當(dāng)然,除基取余法也是一個(gè)不錯(cuò)的方法,思維方式因人而異,適合自己的方法才是最好的。

②小數(shù)部分的轉(zhuǎn)換
乘基取整法:即用二進(jìn)制數(shù)的基數(shù)2去乘十進(jìn)制小數(shù),第一次所得的整數(shù)為小數(shù)部分的最高位,把得到的數(shù)的小數(shù)部分再乘以該基數(shù),所得的整數(shù)為次低位,依次類(lèi)推,直至小數(shù)為0,所得的整數(shù)為目的數(shù)的最低位。


1.4 二進(jìn)制算術(shù)運(yùn)算
1.4.1 二進(jìn)制算術(shù)運(yùn)算的特點(diǎn)

結(jié)論:如果我們能設(shè)法將減法操作轉(zhuǎn)化為某種形式的加法操作,那么加、減、乘、除運(yùn)算就全部可以用 “移位” 和 “相加” 兩種操作實(shí)現(xiàn)了。
1.4.2 反碼、補(bǔ)碼和補(bǔ)碼運(yùn)算
原碼:在二進(jìn)制數(shù)的前面增加一位符號(hào)位,符號(hào)位為0表示這個(gè)數(shù)是正數(shù),符號(hào)位為1表示這個(gè)數(shù)是負(fù)數(shù)。這種形式的數(shù)稱(chēng)為原碼。

反碼:

補(bǔ)碼:

總結(jié):
對(duì)正數(shù)而言,原碼 = 反碼 = 補(bǔ)碼
對(duì)負(fù)數(shù)而言,原碼的符號(hào)位不變、其他位取反,得到反碼;末位再加1,得到補(bǔ)碼。
計(jì)算方式:兩個(gè)原碼的計(jì)算,可以轉(zhuǎn)化為對(duì)應(yīng)補(bǔ)碼的計(jì)算,最后再將結(jié)果(補(bǔ)碼計(jì)算的結(jié)果也是補(bǔ)碼)逆轉(zhuǎn)換為對(duì)于的原碼即可。即 “變換 - 計(jì)算 - 反變換” 的過(guò)程。

1.5 幾種常用的碼制
一、 十進(jìn)制代碼

①8421碼:又稱(chēng)BCD碼,是十進(jìn)制代碼中最常用的一種。4位依次所對(duì)應(yīng)的權(quán)與二進(jìn)制相同。
②恒權(quán)代碼:每一位的權(quán)是固定不變的代碼。
③余3碼:可以看作是 “8421” + 0011 的結(jié)果,優(yōu)點(diǎn)是:用余3碼做十進(jìn)制加法運(yùn)算時(shí),若兩數(shù)之和為10,正好等于二進(jìn)制數(shù)的16,于是便從高位自動(dòng)產(chǎn)生進(jìn)位信號(hào)。
④余3循環(huán)碼:從格雷碼(下文會(huì)講到)的第四位(0010)開(kāi)始,是一種變權(quán)碼。主要特點(diǎn)是相鄰的兩個(gè)代碼之間僅有一位的狀態(tài)不同。
二、格雷碼(又稱(chēng)循環(huán)碼)

小tips:4位典型格雷碼的順序記憶方式(需要借助卡諾圖,后續(xù)會(huì)提及)
畫(huà)出4位變量卡諾圖,典型格雷碼順序如下所示:

三、美國(guó)信息交換標(biāo)準(zhǔn)代碼(ASCII碼)
