邏輯設計
數字系統、運算和代碼
王宏祺 講師
Department of Computer and Communication Kun San University
Tainan , Taiwan , R.O.C.
Mar. 9, 2011
1
2-1 十進位數 2-2 二進位數
2-3 十進位數轉換成二 進位數
2-4 二進位數運算法
2-5 二進位的1’s和2’補數
2-6 有號數
2-7 有號數的數學運算 2-8 十六進位數
2-9 以二進位對十進位 數編碼(BCD)
2-10 數位碼和同位
2-1 十進位數
舉個例子,想表示23。
3
2-1 十進位數
十進位數中每個數字的位置能指出所表示數值的大小
,同時也各代表一特定的權數。整個數值中各位值的權數 由右到左呈10的正冪次方遞增,由開始100=1。
……105 104 103 102 101 100
如果是小數的話,其各位值的權數就是由左向右呈10的負 冪次方遞減,由10-1開始。
102 101 10 .100 1 102 103 小數點
例題一
1.分別將下列十進位數中,各個數字所表示的數值寫出來 (a)471 (b)9356 (c)125,000
5
2-2 二進位數
二進位數系統是另一種量的表示法。二進位數的權 數是以2的冪次方來表示的。
以二進位計數。
求出某一已知位元數所能表示的最大十進位數。
將一二進位數轉換為十進位數。
以二進位數計算
十進位數 二 進 位 數
0 0 0 0 0 1 0 0 0 1
2 0 0 1 0 3 0 0 1 1
4 0 1 0 0 5 0 1 0 1
6 0 1 1 0 7 0 1 1 1
8 1 0 0 0 9 1 0 0 1
10 1 0 1 0 11 1 0 1 1
12 1 1 0 0 13 1 1 0 1
14 1 1 1 0 15 1 1 1 1
表2-1 由表2-1可知,由0計數到15 得用到四個位元。大致上,以n 個位元便可計數到 個數。
最大十進位數
舉例來看,以5個位元 (n = 5) 就 可以由0計數到31。
2n 1 2n 1
25 1 32 1 31
7
二進位數的權數結構
二進位數也有其權數。最右邊的位元是整個二進位數 的最低有效位元 (the least significant bit, LSB),其權數為
。二進位數的權數依各個位元由右向左以2的正冪 次方遞增。最左邊的位元為最高有效位元 (the most
significant bit, MSB),其權數由二進位數的位元個數來決 定。
2
0 1
1 3 2 1 0 1 2
2n 2 2 2 2 2 2 2n
二進位小數點
二進位對十進位轉換
2-3
將二進位整數1101101轉換為十進位數。
解:
先決定位元值等於1的各個權數,再將權數相加便 可得到其十進位數。
權數: 26 25 24 23 22 21 20 二進位數: 1 1 0 1 1 0 1
例題二 將二進位數10010001轉換為十進位。
6 5 3 2 0
1101101 2 2 2 2 2 64 32 8 4 1
109
9
二進位對十進位轉換
2-4
將二進位小數0.1011轉換為十進位數。
解:
解 先決定位元值為1的各個權數,再將各權數相加即 可得到十進位小數。
權數: 2-1 2-2 2-3 2-4 二進位數: 0 . 1 0 1 1
例題三 將二進位數10.111轉換為十進位數。
1 3 4
0.1011 2 2 2
0.5 0.125 0.0625
0.6875
例題四
4.將下列二進位數轉換為十進位數:
(a)11 (b)100 (c)111 (d)1000 (e)1001 (f)1100 (g)1011 (h)1111
11
例題五
5.將下列二進位數轉換為十進位數:
(a)1110 (b)1010 (c)11100 (d)10000 (e)10101 (f)11101 (g)10111 (h)11111
例題六
6. 將下列二進位數轉換為十進位數:
(a)110011.11 (b)101010.01 (c)1000001.111 (d)1111000.101 (e)1011100.10101 (f)1110001.0001 (g)1011010.1010
(h)1111111.11111
13
反覆除以2的轉換法
十進位數12轉換為二進位數的步驟。
將十進位小數轉換成二進位數
反覆乘以2的轉換法 十進位小數則可以用反覆乘以2的方 法來轉換為二進位數。將十進位小數0.3125轉換為二進位 數。
15
例題七
7.利用權數和法,將下列各十進位數轉換為二進位數:
(a)10 (b)17 (c)24 (d)48 (e)61 (f)93 (g)125 (h)186
例題八
17
8. 利用反覆除以2的方法,將下列十進位數轉換為二進位數:
(a)15 (b)21 (c)28 (d)34 (e)40 (f)59 (g)65 (h)73
例題九
9.利用權數和法,將下列各十進位小數轉換為二進位數:
(a)0.32 (b)0.246 (c)0.0981
例題十
19
11.利用反覆乘以2的方法,將下列十進位數轉換為二進位數:
(a)0.98 (b)0.347 (c)0.9028
二進位數的加法
2-6
做下列各二進位數的加法運算:
(a)11 + 11 (b)100 + 10 (c)111 + 111 (d)110 + 100 解:
對應的十進位數加法並列在旁,提供參考。
(a) (b)
(c) (d)
例題十一 計算1111 + 1100的和。
11 3
11 3
6
110
100 4 10 2 6
110 111 7
11 3 10
1010
110 6 100 4 10
1010
例題十二
21
12.將下列二進位數相加:
(a) 11 + 01 (b) 10 + 10 (c)101 + 11
(d) 111 + 110 (e)1001 + 101 (f)1101 + 1011
二進位數的減法
2-7
計算下列二進位數的減法:
(a)11 - 01 (b)11 – 10 解:
解(a) (b)
此例題中不須用到借位的算法。二進位數01就等 於是1。
例題十三 計算111 - 100。
11 3
01 1
2
10
11 3 10 2 1
01
例題十四
23
14.以直接減法,執行下列二進位數的減法運算:
(a)11 – 1 (b)101 - 100 (c)110 - 101
(d)1110 - 11 (e)1100 - 1001 (f)11010 – 10111
二進位數的乘法
二位元值相乘的四個基本法則:
0 0 = 0 0 1 = 0 1 0 = 0 1 1 = 1
例題十五
25
15. 執行下列二進位數的乘法運算:
(a)11 11 (b)100 10 (c)111 101
(d)1001 110 (e)1101 1101 (f)1110 1101
二進位數的除法
二進位數的除法和十進位數的除法步驟相同。
2-10
執行下列二進位數的除法運算:
(a)110 11 (b) 110 10 解:
(a) (b)
例題十六 計算1100除以100。
11 110 11
000
10 2
3 6 6 0
10 110 10
10 10 00
11 3
2 6 6 0
例題十七
27
17. 執行下列二進位數的除法運算:
(a)100 10 (b)1001 11 (c)1100 100
找出二進位數的1’s補數
將二進位數中所有位元值為1的改為0,為0的改為1,
就可得到此二進位數的1’s補數,方法如下:
1 0 1 1 0 0 1 0
0 1 0 0 1 1 0 1 1 s
二進位數
, 補數
找出二進位數的2’s補數
在1’s補數的LSB加1,就可得到二進位數的2’s補數。
2’s補數 = (1’s補數 ) + 1
2-11
求出10110010的2’s補數。
解:
例題十八 求出11001011的2’s補數。
10110010
01001101 1 s
1 1
2 s
01001110
二進位數 補數 加
補數
,
,
29
例題十九
19.不限方式,求出下列二進位數的2's補數:
(a)10 (b)111 (c)1001 (d)1101 (e)11100 (f)10011 (g)10110000 (h)00111101
2-6 有號數
數位系統必須能處理正數和負數。有號二進位數包含 有符號和數字兩部分資訊。以二進位形式表示有號整數的 方法有三種:符號 - 數字、1’s補數、2’s補數。
31
1’s補數表示法
1’s補數表示法中,正數和有號數的正號-數字寫法一 致。而負數則是相對於正數的1’s補數。十進位數 -25就等 於是 +25 (00011001) 的1’s補數,其寫法如下:
11100110
在1’s補數表示法中,負數等於其對應正數的1’s補數。
2’s補數表示法
2-12
以八個位元將十進位數 -39用有號數、1’s補數、
2’s補數等表示法表示出來。
解:
解 首先,以八個位元表示出 +39的二進位數。
00100111
有號數表示法中,只要將原符號位元由0改為1,
其餘位元保留不變。其寫法為:
10100111
33
2’s補數表示法
11011000 1 s 1
2 s
11011001
補數 補數
,
,
1’s補數表示法中,取 +39 (00100111) 的1’s補數即為 -39的寫法:
11011000
2’s補數表示法中,取 +39 (00100111) 的2’s補數即為 -39的寫法:
例題二十 以有號數、1’s補數、和2’s補數分別表示出 +19和 -19。
例2-12 (續)
有號數的十進位數值
2-13
以符號 - 數字表示法所表示的有號二進位數 10010101,其十進位數值為多少?
解:七個位元數字,及各位元權數如下:
將位元值為1的所有權數加起來,
16 + 4 + 1 = 21
符號位元為1,代表負數,故此十進位數值為 -21。
例題二十一 求出有號數01110111的十進位數值。
6 5 4 3 2 1 0
2 2 2 2 2 2 2 0 0 1 0 1 0 1
35
有號數的十進位數值
2-14
將下列以1’s補數表示的s有號二進位數的十進位數 值計算出來:
(a)00010111 (b)11101000 解:
(a)此正數的各個位元值及以2的乘冪值表示的權數分別 如下:
將位元值等於1的各個權數相加,
16 + 4 + 2 + 1 = +23
有號數的十進位數值
2-14 (續)
(b)此負數的各個位元值及以2的乘冪值表示的權數分 別如下:注意,負號位元的權數為 ,即 -128。
將位元值等於1的各個權數相加,
-128 + 64 + 32 + 8 = -24
再將所得結果加1,最後的十進位數值為 -24 + 1 = -23
例題二十二 計算1’s補數11101011的十進位數值。
27
7 6 5 4 3 2 1 0
2 2 2 2 2 2 2 2 1 1 1 0 1 0 0 0
37
有號數的十進位數值
2-15
計算下列以2’s補數表示的有號二進位數的十進 位數值:
(a)01010110 (b)10101010 解:
(a)此正數各個位元值和其權數如下:
將位元值為1的各個權數加起來,
64 + 16 + 4 + 2 = +86
7 6 5 4 3 2 1 0
2 2 2 2 2 2 2 2 0 1 0 1 0 1 1 0
有號數的十進位數值
2-15 (續)
(b)此負數的各個位元值及其權數如下。注意負號位 元的權數為 ,即 -128。
將位元值等於1的各個權數加起來,
-128 + 32 + 8 + 2 = -86
例題二十三 計算2’s補數11010111的十進位數值。
27
7 6 5 4 3 2 1 0
2 2 2 2 2 2 2 2 1 0 1 0 1 0 1 0
39
例題二十四
24. 將下列十進位數以8位元的符號數字碼表示成二進位數:
(a)+29 (b)-85 (c)+100 (d)-123
例題二十五
41
25. 以1's補數表示法將下列十進位數寫成8位元的數碼:
(a)-34 (b)+57 (c)-99 (d)+115
例題二十六
26. 以2's補數表示法將下列十進位數寫成8位元的數碼:
(a)+12 (b)-68 (c)+101 (d)-125
例題二十七
43
27. 求出下列以符號數字表示法寫成的有號二進位數所代表的 十進位數值:
(a)10011001 (b)01110100 (c)10111111
例題二十八
28.求出下列以1's補數表示法寫成的有號二進位數所代表的 十進位數值:
(a)10011001 (b)01110100 (c)10111111
例題二十九
45
29.求出下列以2's補數表示法寫成的有號二進位數所代表的 十進位數值:
(a)10011001 (b)01110100 (c)10111111
加法運算
發生溢位的情形 當兩數相加,而且表示和數所須的位元 數大於加數或被加數的位元數,符號位元的位元值又不正 確時,這種情形就稱為溢位 (overflow)。兩數皆為正或皆 為負時才會發生溢位。
01111101 125 00111010 58 10110111 183
符號錯誤 數字大小也有錯誤
2-7 有號數的數學運算
減法運算
減法可說是加法的特例。舉例來說,+9 ( 被減數 ) 減 去 +6 ( 減數 ) 就等於 +9加上 -6。
兩有號數相減時,取減數的2’s補數,再與被減數相 加,若有進位,也要捨棄。
47
乘法運算
乘法運算中的數,分別為被乘數 (multiplicand),乘 數 (multiplier),與積 (product)。
利用加法執行乘法運算的兩個基本方法為直加法 (direct addition) 與部分乘積法 (partial products)。
兩二進位數相乘時,必須以二進位原形 ( 非補數形 ) 來執行。
8 3 24
被乘數
乘數
積
乘法運算
部分乘積法。
2-19
執行有號二進位數的乘法:01010011乘以 11000101。
解:
步驟1. 被乘數的符號位元為0,乘數的符號位元為1。
故積的符號位元應為1 ( 負 )。
步驟2. 取乘數的2’s補數使之回復為二進位原形。
11000101 00111011
49
乘法運算
2-19 (續)
步驟3. 和4. 開始進入乘法運算。注意到式中所列出的僅限於數字位
元。 1010011
0111011 1010011 1010011 11111001 0000000 011111001 1010011 1110010001 1010011
100011000001 1010011
1001100100001 0000000
1001100100001
被乘數 乘數
第一部分乘積 第二部分乘積
第一、二部分乘積和 第三部分乘積
和
第四部分乘積 和
第五部分乘積 和
第六部分乘積 和
第七部分乘積 最後乘積
乘法運算
2-19 (續)
步驟5. 在步驟1中已決定出乘積的符號位元為1,所以取 乘積的2’s補數。
例題三十 將上例乘式中的二進位數轉換為十進位數,
再以十進位數做一次乘法運算,驗證上例的結果是否正 確。
再加上符號位元 1001100100001 0110011011111 1 0110011011111
51
除法運算
2-20
計算01100100除以00011001。
解:
步驟1. 兩數的性質符號皆為正,所以商亦為正。商一 開始為零:00000000。
步驟2. 利用2’s補數加法由被除數減去除數 ( 記得捨去 最後的進位值 )。
商數加1:00000000 + 00000001 = 00000001
01100100
11100111 2 s 01001011
被除數
除數的 , 補數
第一個部分餘數為正
除法運算
2-20 (續)
步驟3. 利用2’s補數加法由第一部分餘數減去除數。
商數加1:00000001 + 00000001 = 00000010
步驟4. 利用2’s補數加法,由第二部分餘數減去除數。
商數加1:00000010 + 00000001 = 00000011
01001011
11100111 2 s 00110010
第一個部分餘數 除數的 , 補數 第二部分餘數為正
00110010
11100111 2 s 00011001
第二部分餘數 除數的 , 補數 第三部分餘數為正
53
2-20 (續)
除法運算
步驟5. 利用2’s補數加法,由第三部分餘數減去除數。
商數加1:00000011 + 00000001 = 00000100 ( 最 後的商 )。除法運算全部完成。
例題三十一 將上例中的二進位數轉換為十進位數,重新 執行除法運算,驗證其結果是否正確。
00011001
11100111 2 s 00000000
第三部分餘數 除數的 , 補數
餘數為零
例題三十二
55
32.將下列各組十進位數轉換為二進位數後,再以2's補數形式 相加:
(a)33和15 (b)56和 -27 (c)-46和25 (d)-110和 -84
例題三十三
33. 以2's補數形式執行下列減法運算:
(a)00110011 - 00010000 (b)01100101 - 11101000
例題三十四
57
34.以2's補數形式計算01101010乘以11110001。
例題三十五
35. 以2's補數形式計算01000100除以00011001。
2-8 十六進位數
十六進位數以十六 為基底,也就是說,它 是由十六個數字與文字 所組成的。
十進位數 二進位數 十六進位數
0 0000 0 1 0001 1 2 0010 2 3 0011 3 4 0100 4 5 0101 5 6 0110 6 7 0111 7 8 1000 8 9 1001 9 10 1010 A 11 1011 B 12 1100 C 13 1101 D 14 1110 E 15 1111 F
表2-3
59
十六進位數轉換為二進位數
2-22
求出下列各十六進位數所代表的二進位數:
(a) (b) (c)
解:
在 (a) 例中,最大有效位1的前面應有3個0,才能 形成4個位元。
例題三十六 將十六進位數6BD3轉換為二進位數。
10A4
16CF8E
169742
16(a)
1000010100100 4 A 0
1 (b)
1100111110001110 E 8
F
C (c)
1001011101000010 2 4
7 9
十進位數轉換為十六進位數
2-25
反覆將十進位數除以16,利用所得的餘數便可得到對等的十六進位 數。
以反覆除以16的方式,將十進位數650轉換為十六進位數。
解:十進位餘數的十六進位表示法:
例題三十七 將十進位數591轉換為十六進位數。
650 40.625 16
40 2.5 16
2 0.125 16
0.625 16 10
0.5 16 8
0.125 16 2
2 8 A 商的整數部分為
零時,即可停止 MSD LSD
十六進位數 2
8 A
十進位餘數的 十六進位表示法
61
利用2’s補數法執行十六進位數的減法運算
例如表示的十六進位數為 。此二進位數的2’s補 數為00110111,寫成十六進位數就是 。
C916
3716
2-27
執行下列十六進位數的減法運算:
(a) (b)
解:
(a)
的2’s補數為
16 16
84 2A C3
16 0B
162A16 00101010
2A16 11010110 D616
利用2’s補數法執行十六進位數的減法運算
2-27 (續)
差為 。 (b)
的2’s補數
差為 。
例題三十八計算 減 的差。
16 16 16
84 D6
15A 2 s
加
以 , 補數做加法,做後要去掉進位
5A16
0B16 00001011
0B16
11110101 F516
16 16 16
C3 F5 1B8
加
去掉進位數
B816
BCD16 17316
63
8421碼
8421碼是BCD的一種。以二進位對十進位數編碼意即 用四位元的二進位碼來表示由0到9的十個十進位基底數。
8421的名稱來自四個位元分別代表的二進位權數 ( 2 , 2 , 2 , 23 2 1 0 )。
表2-5 十進位數 /BCD之間的轉換
十進位數字 0 1 2 3 4 5 6 7 8 9
BCD 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001
8421碼
無效碼 其實以4個位元,總共可以有十六個組合 ( 從0000 到1111),但是8421碼只用了其中10個。沒用到的6個碼-
1010, 1011, 1100, 1101, 1110, 1111-在8421 BCD碼中稱為 無效碼 (invalid code)。
65
8421碼
2-28
將下列十進位數轉換成BCD碼:
(a)35 (b)98 (C)170 (d)2469 解:
解
例題三十九 將十進位數9673轉換為BCD碼。
(a)
00110101 5
3 (b)
10011000 8 9
(c)
000101110000 0 7
1 (d)
0010010001101001 9 6
4 2
BCD碼的加法運算
BCD是一種數字碼,可以用來做算術運算。加法是最 重要的運算方式,因為其它三者 ( 減,乘,除 ) 都可以利 用加法運算來執行。
67
2-10 數位碼和同位
本節所介紹的代碼包括了格雷碼 (Gray code) 和ASCII 碼。利用同位位元檢測代碼是否有誤也涵蓋在本節內容中。
說明格雷碼的優點。
格雷碼和二進位碼的互換。
使用ASCII碼。
依據同位法判別代碼是否有誤。
格雷碼
1 0 1 1 0
1 1 1 0 1
二進位數
格雷碼
二進位數轉換為格雷碼 二進位數和格雷碼之間的互換有 時很有用。下列準則說明二進位數轉換為格雷碼的方法:
1.格雷碼的最大有效位 ( 在最左邊 ) 和對照的二進位數最 大有效位是一樣的。
2.將二進位碼中的各個位元值由左向右每兩個依序相加以 得到格雷碼的下一個位元值。有進位的話,將進位值捨 去。
舉例來看,二進位數10110轉換為格雷碼的方式如下:
69
2-32
(a)將二進位數11000110轉換為格雷碼。
(b)將格雷碼10101111轉換為二進位數。
解:
(a)二進位數轉換為格雷碼:
1 1 0 0 0 1 1 0
1 0 1 0 0 1 0 1
格雷碼
2-32 (續)
格雷碼
(b)格雷碼轉換為二進位數:
例題四十 (a) 將二進位數101101轉換為格雷碼;(b) 將 格雷碼100111轉換為二進位數。
1
1
0
0 0
1
1
0
1
1
1
0
1
1
1
0
71
文字與數字代碼
要傳達訊息,不只須要數字,還須要文字和符號。
ASCII碼
美國資訊交換標準碼 (American Standard Cord for Information Interchange, ASCII),唸作 “askee”-是大 部分電腦和其它電子儀器中公認的文字數字碼。
ASCII利用7位元的二進位碼來表示128個指令與符 號。
以同位法檢測錯誤
偶 同 位 奇 同 位
P BCD P BCD
0 0000 1 0000 1 0001 0 0001 1 0010 0 0010 0 0011 1 0011 1 0100 0 0100 0 0101 1 0101 0 0110 1 0110 1 0111 0 0111 1 1000 0 1000 0 1001 1 1001
表2-10 由表2-10列出每個BCD數
要形成偶或奇同位所須的同位 位元,可以看出在數碼上附加 同位位元的方法。各個BCD數 的同位位元列在標示P的欄中。
同位位元可以附加在代碼 的開頭或末端,端視系統的設 計而定。注意1的總數 ( 包含 同位位元在內 ) 在偶同位時要 恆為偶數,在奇同位時則要恆 為奇數。
73
以同位法檢測錯誤
2-34
對下列各位元組指定一個適當的偶數同位位元:
(a)1010 (b)111000 (c)101101 (d)100011100101 (e)101101011111
解:視情形在各代碼中加入同位位元1或0,使整個代 碼中1的個數為偶數。同位位元在最左邊。
(a)01010 (b)1111000 (c)0101101 (d)0100011100101 (e)1101101011111