• 沒有找到結果。

2-4 二進位數運算法

N/A
N/A
Protected

Academic year: 2022

Share "2-4 二進位數運算法"

Copied!
74
0
0

加載中.... (立即查看全文)

全文

(1)

邏輯設計

數字系統、運算和代碼

王宏祺 講師

Department of Computer and Communication Kun San University

Tainan , Taiwan , R.O.C.

Mar. 9, 2011

1

(2)

2-1 十進位數 2-2 二進位數

2-3 十進位數轉換成二 進位數

2-4 二進位數運算法

2-5 二進位的1’s和2’補數

2-6 有號數

2-7 有號數的數學運算 2-8 十六進位數

2-9 以二進位對十進位 數編碼(BCD)

2-10 數位碼和同位

(3)

2-1 十進位數

舉個例子,想表示23。

3

(4)

2-1 十進位數

十進位數中每個數字的位置能指出所表示數值的大小

,同時也各代表一特定的權數。整個數值中各位值的權數 由右到左呈10的正冪次方遞增,由開始100=1。

……105 104 103 102 101 100

如果是小數的話,其各位值的權數就是由左向右呈10的負 冪次方遞減,由10-1開始。

102 101 10 .100 1 102 103 小數點

(5)

例題一

1.分別將下列十進位數中,各個數字所表示的數值寫出來 (a)471 (b)9356 (c)125,000

5

(6)

2-2 二進位數

二進位數系統是另一種量的表示法。二進位數的權 數是以2的冪次方來表示的。

 以二進位計數。

 求出某一已知位元數所能表示的最大十進位數。

 將一二進位數轉換為十進位數。

(7)

以二進位數計算

十進位數 二 進 位 數

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

(8)

二進位數的權數結構

二進位數也有其權數。最右邊的位元是整個二進位數 的最低有效位元 (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

二進位小數點

(9)

二進位對十進位轉換

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

(10)

二進位對十進位轉換

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

(11)

例題四

4.將下列二進位數轉換為十進位數:

(a)11 (b)100 (c)111 (d)1000 (e)1001 (f)1100 (g)1011 (h)1111

11

(12)

例題五

5.將下列二進位數轉換為十進位數:

(a)1110 (b)1010 (c)11100 (d)10000 (e)10101 (f)11101 (g)10111 (h)11111

(13)

例題六

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

(14)

反覆除以2的轉換法

十進位數12轉換為二進位數的步驟。

(15)

將十進位小數轉換成二進位數

反覆乘以2的轉換法 十進位小數則可以用反覆乘以2的方 法來轉換為二進位數。將十進位小數0.3125轉換為二進位 數。

15

(16)

例題七

7.利用權數和法,將下列各十進位數轉換為二進位數:

(a)10 (b)17 (c)24 (d)48 (e)61 (f)93 (g)125 (h)186

(17)

例題八

17

8. 利用反覆除以2的方法,將下列十進位數轉換為二進位數:

(a)15 (b)21 (c)28 (d)34 (e)40 (f)59 (g)65 (h)73

(18)

例題九

9.利用權數和法,將下列各十進位小數轉換為二進位數:

(a)0.32 (b)0.246 (c)0.0981

(19)

例題十

19

11.利用反覆乘以2的方法,將下列十進位數轉換為二進位數:

(a)0.98 (b)0.347 (c)0.9028

(20)

二進位數的加法

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)

例題十二

21

12.將下列二進位數相加:

(a) 11 + 01 (b) 10 + 10 (c)101 + 11

(d) 111 + 110 (e)1001 + 101 (f)1101 + 1011

(22)

二進位數的減法

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)

例題十四

23

14.以直接減法,執行下列二進位數的減法運算:

(a)11 – 1 (b)101 - 100 (c)110 - 101

(d)1110 - 11 (e)1100 - 1001 (f)11010 – 10111

(24)

二進位數的乘法

二位元值相乘的四個基本法則:

0  0 = 0 0  1 = 0 1  0 = 0 1  1 = 1

(25)

例題十五

25

15. 執行下列二進位數的乘法運算:

(a)11  11 (b)100  10 (c)111  101

(d)1001  110 (e)1101  1101 (f)1110  1101

(26)

二進位數的除法

二進位數的除法和十進位數的除法步驟相同。

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)

例題十七

27

17. 執行下列二進位數的除法運算:

(a)100  10 (b)1001  11 (c)1100  100

(28)

找出二進位數的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

       

二進位數

, 補數

(29)

找出二進位數的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

(30)

例題十九

19.不限方式,求出下列二進位數的2's補數:

(a)10 (b)111 (c)1001 (d)1101 (e)11100 (f)10011 (g)10110000 (h)00111101

(31)

2-6 有號數

數位系統必須能處理正數和負數。有號二進位數包含 有符號和數字兩部分資訊。以二進位形式表示有號整數的 方法有三種:符號 - 數字、1’s補數、2’s補數。

31

(32)

1’s補數表示法

1’s補數表示法中,正數和有號數的正號-數字寫法一 致。而負數則是相對於正數的1’s補數。十進位數 -25就等 於是 +25 (00011001) 的1’s補數,其寫法如下:

11100110

在1’s補數表示法中,負數等於其對應正數的1’s補數。

(33)

2’s補數表示法

2-12

以八個位元將十進位數 -39用有號數、1’s補數、

2’s補數等表示法表示出來。

解:

首先,以八個位元表示出 +39的二進位數。

00100111

有號數表示法中,只要將原符號位元由0改為1,

其餘位元保留不變。其寫法為:

10100111

33

(34)

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 (續)

(35)

有號數的十進位數值

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

(36)

有號數的十進位數值

2-14

將下列以1’s補數表示的s有號二進位數的十進位數 值計算出來:

(a)00010111 (b)11101000 解:

(a)此正數的各個位元值及以2的乘冪值表示的權數分別 如下:

將位元值等於1的各個權數相加,

16 + 4 + 2 + 1 = +23

(37)

有號數的十進位數值

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

(38)

有號數的十進位數值

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

(39)

有號數的十進位數值

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

(40)

例題二十四

24. 將下列十進位數以8位元的符號數字碼表示成二進位數:

(a)+29 (b)-85 (c)+100 (d)-123

(41)

例題二十五

41

25. 以1's補數表示法將下列十進位數寫成8位元的數碼:

(a)-34 (b)+57 (c)-99 (d)+115

(42)

例題二十六

26. 以2's補數表示法將下列十進位數寫成8位元的數碼:

(a)+12 (b)-68 (c)+101 (d)-125

(43)

例題二十七

43

27. 求出下列以符號數字表示法寫成的有號二進位數所代表的 十進位數值:

(a)10011001 (b)01110100 (c)10111111

(44)

例題二十八

28.求出下列以1's補數表示法寫成的有號二進位數所代表的 十進位數值:

(a)10011001 (b)01110100 (c)10111111

(45)

例題二十九

45

29.求出下列以2's補數表示法寫成的有號二進位數所代表的 十進位數值:

(a)10011001 (b)01110100 (c)10111111

(46)

加法運算

發生溢位的情形 當兩數相加,而且表示和數所須的位元 數大於加數或被加數的位元數,符號位元的位元值又不正 確時,這種情形就稱為溢位 (overflow)。兩數皆為正或皆 為負時才會發生溢位。

01111101 125 00111010 58 10110111 183

 

符號錯誤 數字大小也有錯誤

2-7 有號數的數學運算

(47)

減法運算

減法可說是加法的特例。舉例來說,+9 ( 被減數 ) 減 去 +6 ( 減數 ) 就等於 +9加上 -6。

兩有號數相減時,取減數的2’s補數,再與被減數相 加,若有進位,也要捨棄。

47

(48)

乘法運算

乘法運算中的數,分別為被乘數 (multiplicand),乘 數 (multiplier),與積 (product)。

利用加法執行乘法運算的兩個基本方法為直加法 (direct addition) 與部分乘積法 (partial products)。

兩二進位數相乘時,必須以二進位原形 ( 非補數形 ) 來執行。

8 3 24

 被乘數

乘數

(49)

乘法運算

部分乘積法。

2-19

執行有號二進位數的乘法:01010011乘以 11000101。

解:

步驟1. 被乘數的符號位元為0,乘數的符號位元為1。

故積的符號位元應為1 ( 負 )。

步驟2. 取乘數的2’s補數使之回復為二進位原形。

11000101  00111011

49

(50)

乘法運算

2-19 (續)

步驟3. 和4. 開始進入乘法運算。注意到式中所列出的僅限於數字位

元。 1010011

0111011 1010011 1010011 11111001 0000000 011111001 1010011 1110010001 1010011

100011000001 1010011

1001100100001 0000000

1001100100001

被乘數 乘數

第一部分乘積 第二部分乘積

第一、二部分乘積和 第三部分乘積

第四部分乘積

第五部分乘積

第六部分乘積

第七部分乘積 最後乘積

(51)

乘法運算

2-19 (續)

步驟5. 在步驟1中已決定出乘積的符號位元為1,所以取 乘積的2’s補數。

例題三十 將上例乘式中的二進位數轉換為十進位數,

再以十進位數做一次乘法運算,驗證上例的結果是否正 確。

再加上符號位元 1001100100001 0110011011111 1 0110011011111

51

(52)

除法運算

2-20

計算01100100除以00011001。

解:

步驟1. 兩數的性質符號皆為正,所以商亦為正。商一 開始為零:00000000。

步驟2. 利用2’s補數加法由被除數減去除數 ( 記得捨去 最後的進位值 )。

商數加1:00000000 + 00000001 = 00000001

01100100

11100111 2 s 01001011

被除數

除數的 補數

第一個部分餘數為正

(53)

除法運算

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

(54)

2-20 (續)

除法運算

步驟5. 利用2’s補數加法,由第三部分餘數減去除數。

商數加1:00000011 + 00000001 = 00000100 ( 最 後的商 )。除法運算全部完成。

例題三十一 將上例中的二進位數轉換為十進位數,重新 執行除法運算,驗證其結果是否正確。

00011001

11100111 2 s 00000000

第三部分餘數 除數的 補數

餘數為零

(55)

例題三十二

55

32.將下列各組十進位數轉換為二進位數後,再以2's補數形式 相加:

(a)33和15 (b)56和 -27 (c)-46和25 (d)-110和 -84

(56)

例題三十三

33. 以2's補數形式執行下列減法運算:

(a)00110011 - 00010000 (b)01100101 - 11101000

(57)

例題三十四

57

34.以2's補數形式計算01101010乘以11110001。

(58)

例題三十五

35. 以2's補數形式計算01000100除以00011001。

(59)

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

(60)

十六進位數轉換為二進位數

2-22

求出下列各十六進位數所代表的二進位數:

(a) (b) (c)

解:

在 (a) 例中,最大有效位1的前面應有3個0,才能 形成4個位元。

例題三十六 將十六進位數6BD3轉換為二進位數。

10A4

16

CF8E

16

9742

16

(a)

1000010100100 4 A 0

1 (b)

1100111110001110 E 8

F

C (c)

1001011101000010 2 4

7 9

(61)

十進位數轉換為十六進位數

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

(62)

利用2’s補數法執行十六進位數的減法運算

例如表示的十六進位數為 。此二進位數的2’s補 數為00110111,寫成十六進位數就是

C916

3716

2-27

執行下列十六進位數的減法運算:

(a) (b)

解:

(a)

的2’s補數為

16 16

84  2A C3

16

 0B

16

2A16  00101010

2A16 11010110  D616

(63)

利用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

(64)

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

(65)

8421碼

無效碼 其實以4個位元,總共可以有十六個組合 ( 從0000 到1111),但是8421碼只用了其中10個。沒用到的6個碼-

1010, 1011, 1100, 1101, 1110, 1111-在8421 BCD碼中稱為 無效碼 (invalid code)。

65

(66)

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

(67)

BCD碼的加法運算

BCD是一種數字碼,可以用來做算術運算。加法是最 重要的運算方式,因為其它三者 ( 減,乘,除 ) 都可以利 用加法運算來執行。

67

(68)

2-10 數位碼和同位

本節所介紹的代碼包括了格雷碼 (Gray code) 和ASCII 碼。利用同位位元檢測代碼是否有誤也涵蓋在本節內容中。

 說明格雷碼的優點。

 格雷碼和二進位碼的互換。

使用ASCII碼。

 依據同位法判別代碼是否有誤。

(69)

格雷碼

1 0 1 1 0

1 1 1 0 1

     

     

二進位數

格雷碼

二進位數轉換為格雷碼 二進位數和格雷碼之間的互換有 時很有用。下列準則說明二進位數轉換為格雷碼的方法:

1.格雷碼的最大有效位 ( 在最左邊 ) 和對照的二進位數最 大有效位是一樣的。

2.將二進位碼中的各個位元值由左向右每兩個依序相加以 得到格雷碼的下一個位元值。有進位的話,將進位值捨 去。

舉例來看,二進位數10110轉換為格雷碼的方式如下:

69

(70)

2-32

(a)將二進位數11000110轉換為格雷碼。

(b)將格雷碼10101111轉換為二進位數。

解:

(a)二進位數轉換為格雷碼:

1    1    0    0    0    1   1    0

1 0 1 0 0 1 0 1

格雷碼

(71)

2-32 (續)

格雷碼

(b)格雷碼轉換為二進位數:

例題四十 (a) 將二進位數101101轉換為格雷碼;(b) 將 格雷碼100111轉換為二進位數。

1

1

0

0 0

1

1

0

1

1

1

0

1

1

1

0

71

(72)

文字與數字代碼

要傳達訊息,不只須要數字,還須要文字和符號。

ASCII碼

美國資訊交換標準碼 (American Standard Cord for Information Interchange, ASCII),唸作 “askee”-是大 部分電腦和其它電子儀器中公認的文字數字碼。

ASCII利用7位元的二進位碼來表示128個指令與符 號。

(73)

以同位法檢測錯誤

偶 同 位 奇 同 位

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

(74)

以同位法檢測錯誤

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

參考文獻

相關文件

磁性墨水字體是一種具有磁性 , 可以經由電子機器辨認 處理的文字符號 , 將這種磁性字體鍵印在票據上 , 以往靠 人工辦理票據交換作業 , 便可以改由電腦自動處理。. 磁性墨水字體辨認

Engineers ,簡稱為IEEE,唸成“EYE triple E”).. Atanasoff) 和他的助理克利福德·貝瑞(Clifford Berry) 發明 了第一部可用電子訊號將資訊編碼的特殊用途

一、數位電子係於民國 72 年配合工業電子精密化分工修正時,將工業電子職 類分為數位電子、儀表電子、與電力電子等 3 組。民國 82 年為配合電子

„ FPGA –現場可規劃邏輯陣列 (field- programmable

z 可規劃邏輯區塊 (programmable logic blocks) z 可規劃內部連接

z 可規劃邏輯區塊 (programmable logic blocks) z 可規劃內部連接

在數位系統中,若有一個以上通道的數位信號需要輸往單一的接收端,數位系統通常會使用到一種可提供選擇資料的裝置,透過選擇線上的編碼可以決定輸入端

„ FPGA –現場可規劃邏輯陣列 (field- programmable