數制
一、 十進制
進位規則是“逢十進一”。任意一個n位整數、m位小數的十進制可表示為:
其中
ki-稱為數制的系數,表示第i位的系數,十進制ki的取值為0 ~ 9十個數, i 取值從 (n-1)~0的所有正整數到-1~-m的所有負整數
10i-表示第i位的權值,10為基數,即采用數碼的個數
n、m-為正整數, n為整數部分的位數, m為小數部分的位數
例如
(249.56)10=2×102+ 4×101+ 9×100+ 5×10–1+ 2×10-2
二、 二進制
進位規則是“逢二進一”,任意一個n位整數、m位小數的二進制可表示為
其中
ki-取值只有兩個數碼:0和1
2i-為二進制的權,基數為2
n、m-為正整數
如(11011.101)2=1×24 +1×23 +0×22 +1×21 +1×20 +1×2-1+0×2-2 +1×2-3=(27.625)10
三、八進制
進位規則是“逢八進一”,其基數為8。任意一個n位整數、m位小數的八進制可表示為
其中
ki-取值有8個數碼:0~7
8i-為八進制的權,基數為8
n、m-為正整數
如(13.74)8=1×81+3×80 +7×8-1+4×8-2 =(11.9375)10
四、十六進制
進位規則是“逢十六進一”,其基數為16。任意一個n位整數、m位小數的十六進制可表示為
其中
ki-取值有16個數碼:0~9、A(10)、 B(11)、C(12)、D(13)、E(14)、 F(15)
16 i-為十六進制的權,基數為16
n、m-為正整數
(F9.1A)16=15×161+9×160 +1×16-1+10×16-2 = (249.1015625)10
一個數碼的進制表示,可用下標,如(N)2表示二進制; (N)10表示十進制; (N)8表示八進制, (N)16表示十六進制
有時也用字母做下標,如(N)B表示二進制,B-Binary;(N)D表示十進制,D-Decimal;(N)O表示八進制,O-Octal;(N)H 表示十六進制,H-Hexadecimal;
下表為0~15個數碼的不同進制表示
D |
B |
O |
H |
D |
B |
O |
H |
0 |
0000 |
00 |
0 |
8 |
1000 |
10 |
8 |
1 |
0001 |
01 |
1 |
9 |
1001 |
11 |
9 |
2 |
0010 |
02 |
2 |
10 |
1010 |
12 |
A |
3 |
0011 |
03 |
3 |
11 |
1011 |
13 |
B |
4 |
0100 |
04 |
4 |
12 |
1100 |
14 |
C |
5 |
0101 |
05 |
5 |
13 |
1101 |
15 |
D |
6 |
0110 |
06 |
6 |
14 |
1110 |
16 |
E |
7 |
0111 |
07 |
7 |
15 |
1111 |
17 |
F |
不同數制間的轉換
數制轉換:不同進制的數碼之間的轉換叫做數制轉換
一、 二進制數、八進制數和十六進制數轉換成十進制數
即將二進制數、八進制數和十六進制數轉換成十進制數,方法是將二進制數、八進制數和十六進制數按下列公式進行展開即可
例如:
二、十進制數轉換成二進制數:
即將十進制數轉換成二進制數,原則是“整數除2,小數乘2
a. 十進制的整數轉換:
將十進制的整數部分用基數2去除,保留余數,再用商除2,依次下去,直到商為0為止,其余數即為對應的二進制數的整數部分
b. 十進制的小數轉換
將小數用基數2去乘,保留積的整數,再用積的小數繼續乘2,依次下去,直到乘積是0為或達到要求的精度,其積的整數部分即為對應的二進制數的小數部分
例 將(173.39)D轉化成二進制數,要求精度為1%
解:其過程如下
a. 整數部分
即(173)D=(10101101) B
b. 小數部分
由於精度要求為1%,故應該令2-m≤1% 取對數可得2-m≤10-2 ;2m≥100;mlg102≥lg10100;m≥6.6
取m=7 滿足精度要求,過程如下
即(0.39)D=(0.0110001) B
故(173.39)D=(10101101.0110001)B
依此類推,對於十進制轉換成其它進制,只要把基數2換成其它進制的基數即可。
三、 二進制轉換成八進制和十六進制
方法:由於3位二進制數可以有8個狀態,000~111,正好是8進制,而4位二進制數可以有16個狀態,0000~1111,正好是16進制,故可以把二進制數進行分組。八進制三位分為一組,不夠補零,十六進制四位分為一組。
注:若將八進制或十六進制轉換成二進制,即按三位或四位轉成二進制數展開即可。
提醒:若要將十進制轉換成八進制或16進制,可先轉換成二進制,再分組,轉換成八進制或十六進制。
二進制的算術運算
二進制算術運算的特點
當兩個二進制數碼表示兩個數量的大小,並且這兩個數進行數值運算,這種運算稱為算術運算。其規則是“逢二進一”、“借一當二”。算術運算包括“加減乘除”,但減、乘、除最終都可以化為帶符號的加法運算。
如兩個數1001和0101的算術運算如下
反碼、補碼和補碼運算
一、原碼:
在用二進制數碼表示一個數值時,其正負是怎么區別的呢?二進制數的正負數值的表述是在二進制數碼前加一位符號位,用“0”表示正數,用“1”表示負數,這種帶符號位的二進制數碼稱為原碼。
例如:+17的原碼為010001,-17的原碼為110001
二、反碼
反碼是為了在求補碼時不做減法運算。二進制的反碼求法是:正數的反碼與原碼相同,負數的原碼除了符號位外的數值部分按位取反,即“1”改為“0”,“0”改為“0”。
例如+7和-7的原碼和補碼為:
+7的原碼為0 111,反碼為0 111
-7的原碼為1 111,反碼為1 000
注:0的反碼有兩種表示,+0的反碼為0 000,-0的反碼為1 111
三、補碼:
當做二進制減法時,可利用補碼將減法運算轉換成加法運算。在將補碼之前先介紹模(或模數)的概念
1.模(模數)的概念:
把一個事物的循環周期的長度,叫做這個事件的模或模數。
如一年365天,其模數為365;鍾表是以12為一循環計數的,故模數為12。十進制計數就是10個數碼0~9,的循環,故模為10。
以表為例來介紹補碼運算的原理:對於圖所示的鍾表
當在5點時發現表停在10點,若想撥回有兩種方法:
a.逆時針撥5個格,即10-5=5,這是做減法。
b.順時針撥七個格,即10+7=17,由於模是12,故1相當於進位12,1溢出,故為7格,也是17-12=5,這是做加法。
由此可見10+7和10-5的效果是一樣的,而5+7=12,將故7稱為-5的補數,即補碼,也可以說減法可以由補碼的加法來代替。
2.補碼的表示
正數的補碼和原碼相同,負數的補碼是符號位為“1”,數值位按位取反加“1”,即“反碼加1”。
例如: 原碼 反碼 補碼
+7 0 111 0 111 0 111
-7 1 111 1 000 1 001
注意:
1.采用補碼后,可以方便地將減法運算轉換成加法運算,而乘法和除法通過移位和相加也可實現,這樣可以使運算電路結構得到簡化;
2.正數的補碼既是它所表示的數的真值,負數的補碼部分不是它所示的數的真值。
3.與原碼和反碼不同,“0”的補碼只有一個,即(00000000)B
4.已知原碼,求補碼和反碼:正數的原碼和補碼、反碼相同;負數的反碼是符號位不變,數值位取反,而補碼是符號位不變,數值位取反加“1”。
如:原碼為10110100,其反碼為11001011,補碼為1100100。
5.已知補碼,求原碼:正數的補碼和原碼相同;負數的補碼應該是數值位減“1”再取反,但對於二進制數來說,先減“1”取反和先取反再加“1”的結果是一樣的。故由負數的補碼求原碼就是數值位取反加“1”。
如已知某數的補碼為(11101110)B,其原碼為(10010010)B
6.如果二進制的位數為n,則可表示的有符號位數的范圍為(-2n~ 2n-1-1),如n=8,則可表示(-128~127),故在做加法時,注意兩個數的絕對值不要超出它所表示數的范圍。
4位帶符號位二進制代碼的原碼、反碼和補碼對照表
十進制數 |
原碼 |
反碼 |
補碼 |
十進制數 |
原碼 |
反碼 |
補碼 |
+7 |
0111 |
0111 |
0111 |
-1 |
1001 |
1110 |
1111 |
+6 |
0110 |
0110 |
0110 |
-2 |
1010 |
1101 |
1110 |
+5 |
0101 |
0101 |
0101 |
-3 |
1011 |
1100 |
1101 |
+4 |
0100 |
0100 |
0100 |
-4 |
1100 |
1011 |
1100 |
+3 |
0011 |
0011 |
0011 |
-5 |
1101 |
1010 |
1011 |
+2 |
0010 |
0010 |
0010 |
-6 |
1110 |
1001 |
1010 |
+1 |
0001 |
0001 |
0001 |
-7 |
1111 |
1000 |
1001 |
0 |
0000 |
0000 |
0000 |
-8 |
1000 |
1111 |
1000 |
二進制編碼
三個術語
數碼:代表一個確切的數字,如二進制數,八進制數等。
代碼:特定的二進制數碼組,是不同信號的代號,不一定有數的意義。
編碼:n 位二進制數可以組合成2n 個不同的信息,給每個信息規定一個具體碼組,這種過程叫編碼。 數字系統中常用的編碼有兩類,一類是二進制編碼,另一類是 二-十進制編碼。另外無論二進制編碼還是二-十進制編碼,都可分成有權碼(每位數碼代表的權值固定)和無權碼。
十進制編碼
用4位二進制代碼表示十進制的0~9個數碼,即二-十進制的編碼。 4位二進制代碼可以有0000~1111十六個狀態,則表示0~9十個狀態可以有多種編碼形式,其中常用的有8421碼、余3碼、2421碼、5211碼、余3循環碼等,其中8421碼、2421碼、5211碼為有權碼,即每一位的1都代表固定的值。
幾種編碼形式
說明:
1. 8421碼:又稱BCD碼,是最常用的十進制編碼。其每位的權為8、4、2、1,如(0101)2=1×4+1×1=5
2. 余3碼不是有權碼,由於它按二進制展開后十進制數比所表示的對應的十進制數大3。如0101表示的是2,其展開十進制數為5,故稱為余3碼。采用余3碼的好處是:利用余3碼做加法時,如果所得之和為10,恰好對應二進制16,可以自動產生進位信號。如0110(3)+1010(7)=1111(10);另外0和9、1和8、2和7…是互為反碼,這對於求補很方便。
3. 2421碼是有權碼,其每位的權為2、4、2、1,如(1100)2=1×2+1×4=6,與余3碼相同0和9、1和8、2和7…是互為反碼。另外當任何兩個這樣的編碼值相加等於9時,結果的4個二進制碼一定都是1111。
4. 5211碼也是有權碼,其每位的權為5、2、1、1,如(0111)2=1×2+1×1+1×1=4,主要用在分頻器上。
5. 余3循環碼是無權碼,它的特點是相鄰的兩個代碼之間只有一位狀態不同。這在譯碼時不會出錯(競爭-冒險)
二進制編碼:
它包括自然碼和循環碼(格雷碼)
自然碼:有權碼,每位代碼都有固定權值,結構形式與二進制數完全相同,最大計數為2n-1,n為二進制數的位數。
循環碼:也叫格雷碼,它是無權碼,每位代碼無固定權值,其組成是格雷碼的最低位是0110循環;第二位是00111100循環;第三位是0000111111110000循環,以此類推可以得到多位數的格雷碼。格雷碼的特點是任何相鄰的兩個碼組中,僅有一位代碼不同,抗干擾能力強,主要用在計數器中。