Các hệ thống cơ số: Như chúng ta đã biết, trong thực tế có rất nhiều hệ cơ số ví dụ như hệ cơ số nhị phân, hệ bát phân, thập phân, thập lục phân,… Trong đó hệ mà con người thường dùng nh
Trang 1Chương I:
CÁC BIỂU DIỄN CƠ SỞ TRONG MÁY TÍNH
I Các hệ thống cơ số:
Như chúng ta đã biết, trong thực tế có rất nhiều hệ cơ số ví dụ như hệ cơ số nhị phân, hệ bát phân, thập phân, thập lục phân,… Trong đó hệ mà con người thường dùng nhất là hệ thập phân Tuy nhiên, máy tính không thể làm việc với hệ thống cơ
số mà con người dùng Nó chỉ có thể dùng hệ nhị phân mà thôi
Cơ số hệ nhị phân là cơ số mà chỉ có hai chữ số cơ bản là 0 và 1 vì máy tính chỉ
làm việc theo cơ chế mạch điện tử và nó hoạt động ở dạng hai trạng thái bật và
tắt ( tương ứng 0 và 1).
Để biết rõ về các hệ thống cơ số, ta sẽ khảo sát một số hệ cơ số cơ bản
1) Hệ thập phân:
Được dùng bởi 10 chữ số cơ bản là: 0, 1, 2,… 9 và có thể biểu diễn dưới dạng đa thức
Ví dụ: 1234.5 là viết tắt của dạng đa thức sau:
1x103 + 2x102 + 3x101 + 4x100 + 5x10-1
= 1x1000 + 2x100 + 3x10 + 4x1 + 0.2 Trong đó:
Ký số 1 có thừa trọng là 3, ký số 2 có thừa trọng là 2, ký số 3 có thừa trọng là 1, ký số 4 có thừa trọng là 0 và ký số 5 có thừa trọng là –1
Tổng quát:
Với một số N bất kỳ, N=dn-1dn-2 d1d0.d-1d-2…d-m có thể được biểu diễn dưới dạng đa thức:
N=dn-1 bn-1 + dn-2 bn-2 + d1 b1 + d0 b0 +…+ d-m b-m với di là các số thuộc khoảng 0<= di <b, n là các ký số bên trái dấu chấm, m là các ký số phải của dấu chấm
2) Hệ bát phân:
Được dùng bởi 8 chữ số cơ bản là: 0, 1, 2,…7 ( hệ này rất ít dùng cho máy tính)
3) Hệ thập lục phân:
Được dùng bởi 16 chữ số cơ bản là: 0, 1, 2,…9, A ,B, C, D, E, F Đây là hệ thường dùng trong máy tính, nhất là cho việc đánh địa chỉ các ô nhớ trong máy tính
Trang 24) Hệ nhị phân:
Được dùng bởi 16 chữ số cơ bản là: 0, 1 đại diện cho hai trạng thái của hoạt động của các mạch trong máy tính như bật (1) hay tắt (0) hệ này thường đươc dùng cho máy tính vì sự tương thích về các trạng thái bit tương ứng với trạng thí
cơ số của hệ Tuy nhiên, ngoài hệ này máy tính vẫn dùng các hệ cơ số khác như
hệ bát phân và hệ thập lục phân
5) Bảng tham chiếu giá trị giữa các hệ cơ số:
Sau đây là bảng tham chiếu các giá trị tương ứng của một số hệ thường dùng trong máy tính:
Hệ 10
(thập phân) (nhị phân)Hệ 2 (thập lục phân)Hệ 16
II Các phép chuyển đổi cơ số:
Do nhu cầu của việc sử dụng nhiều hệ thống cơ số, khi sử dụng hệ thống cơ số con người thường dùng hệ thập phân, còn máy tính thì dùng hệ nhị phân Như vậy,
để có thể hiểu giá trị của một số ở hệ này và ở hệ khác, cũng như có thể làm việc
dễ dàng cho dù ở hệ cơ số nào chăng nữa thì phải có phương pháp để xác định giá trị các con số tức là phương pháp chuyển đổi qua lại giữa các cơ số
Chuyển đổi cơ số tức là chuyển đổi một con số từ hệ này sang hệ khác Sau đây, chúng ta sẽ tiếp cận một số qui tắc chuyển đổi
Trang 31) Qui tắc 1: Dùng chuyển đổi một số từ hệ thập phân sang hệ có cơ số b (
bất kỳ), thực hiện như sau :
Để chuyển đổi một số từ hệ thập phân sang hệ b (bất kỳ) ta tách số thành 2 phần: Phần nguyên và phần thập phân Sau đó, thực hiện việc chuyển đổi từng phần một
Chuyển phần nguyên N:
Phần nguyên N được viết như sau:
N = dn-1 bn-1 + dn-2 bn-2 +…+ d1 b1 + d0 b0
= (dn-1 bn-2 + dn-2 bn-3 +…+d1 )b1 + d0
Chia N cho b ( b là hệ cần chuyển) được phần dư là d0 và thương là:
dn-1 bn-2 + dn-2 bn-3 +…+d1.
Đặt N’= dn-1 bn-2 + dn-2 bn-3 +…+d1 tiếp tục chia N’ cho b và lặp đi lặp lại bước trên cho đến khi phần thương bằng không (= 0) Kết quả được tính theo công thức:
S= dn-1dn-2 d1d0
Chuyển phần thập phân P:
P được viết như sau:
P=.d-1d-2d-3…d-m và biểu diễn dưới dạng đa thức:
P=d-1b-1 + d-2b-2 + d-3b-3 +…+ d-mb-m nhân 2 vế cho b được:
bP=d-1+ d-2b-1 + d-3b-2 +…+ d-mb-m+1
Như vậy, kết quả sau khi nhân cho b ta được phần nguyên d-1 và phần thập phân là d-2b-1 + d-3b-2 +…+ d-mb-m+1
Đặt P’= d-2b-1 + d-3b-2 +…+ d-mb-m+1nhân 2 vế cho b ta được:
bP’= d-2 + d-3b-1 +…+ d-mb-m+1+1 (=m+2)rõ ràng ta có được phần nguyên là d-2 và phần thập phân d-3b-1 +…+ d-mb-m+2ta lặp lại bước trên cho đến khi không còn phần thập phân
Đối với việc chuyển đổi một số nguyên (không có phần thập phân) ta làm như sau sẽ đơn giản hơn:
Lấy số thập phân chia cho cơ số b cho đến khi phần thương của phép chia bằng 0, số đổi được chính là các phần dư của phép chia theo thứ tự ngược lại
Ví dụ 1: Chuyển số 2310 sang hệ nhị phân
23 : 2 = 11 ( dư 1) (d0)
11 : 2 = 5 ( dư 1) (d1)
5 : 2 = 2 ( dư 1) (d2)
2 : 2 = 1 ( dư 0) (d3)
1 : 2 = 0 ( dư 1) (d4)
Kết quả S = d4d3d2d1d0 = 101112
Trang 4Ví dụ 2: Chuyển số 324110 sang hệ thập lục
2341 : 16 = 146 (dư 5) (d0)
146 : 16 = 9 (dư 2) (d1)
9 : 16 = 0 (dư 9) (d2)
vậy S = d2d1d0= 92516
Ví dụ 3: Chuyển số 0.687510 sang hệ nhị phân
0.6875 x 2 = 1.375 được 1
0.375 x 2 = 0.750 được 0
0.750 x 2 = 1.50 được 1
Vậy 0.687510 = 0.10112
Chú ý: Với việc chuyển đổi cơ số giữa 2 hệ ta cần lưu ý
Đối với phần nguyên ta sắp các dư số theo thứ tự “ngược” để được kết quả
Đối với phần thập phân ta sắp các kết quả nhân theo thứ tự ”xuôi”
2) Qui tắc 2: dùng để chuyển đổi một số từ hệ có cơ số b về hệ thập phân, ta sử dụng công thức sau
N = d n-1 d n-2 d 1 d 0 = d n-1 b n-1 + d n-2 b n-2 + d 1 b 1 + d 0 b 0
Ví dụ 1: Chuyển số 10110.1 từ hệ nhị phân sang hệ thập phân
X = 10110.1 = 1*24 + 0*23 + 1*22 + 1*21 + 0*20 + 1*2-1
= 16 + 4 + 2 +0.5 = 22.510
Ví dụ 2: Chuyển số 110 từ hệ nhị phân sang hệ thập phân
X = 110 = 1*22 + 1*21 + 0*20 = 610
3) Chuyển đổi số giữa các hệ Nhị phân - Thập phân - Thập lục phân:
Do mối liên hệ mật thiết giữa các hệ này trong việc sử dụng chúng trong việc lưu trữ và tính toán của con người và máy tính nên hình thành bộ 3 hệ trên
Dĩ nhiên chúng ta có thể bộ 3 hệ này thông qua hệ trung gian thập phân theo 2 qui tắc đã nêu ở trên Tuy nhiên, ta dễ dàng có nhận thấy rằng: Đối với các hệ cơ
số là luỹ thừa của 2 như 8 (23) và 16 (24) thì không chỉ dùng 2 phương pháp
chuyển đổi trên mà còn có phương pháp ngắn và đơn giản hơn nhiều
Qui tắc 3: dùng chuyển đổi từ hệ nhị phân sang hệ thập lục phân, thực hiện :
Nhóm lần lượt 4 bit từ phải sang trái, sau đó thay thế các nhóm 4 bit bằng giá trị tương ứng với hệ thập lục phân (tra theo bảng trên)
Ví dụ : X = 11’10112 = 3B16
1) Qui tắc 4: dùng chuyển đổi từ hệ thập lục phân sang hệ nhị phân, thực hiện như sau : ứng với mỗi chữ số sẽ được biểu diễn dưới dạng 4 bit
Ví dụ : X = 3B16 = 0011’1011 = 1110112
Trang 52) Qui tắc 5: dùng chuyển đổi từ hệ nhị phân sang bát phân, thực hiện như sau: Nhóm lần lượt 3 bit từ phải sang trái, sau đó thay thế các nhóm 3 bit bằng giá trị tương ứng với hệ bát phân (tra theo bảng trên)
Ví dụ: X = 1110112 = 111.011 = 738
3) Qui tắc 6: dùng chuyển đổi bát phân sang nhị phân, thực hiện như sau: ứng với mỗi chữ số sẽ được biểu diễn dưới dạng 3 bit
Ví dụ: X = 348 = 0111002
4) Tổng quát: Dùng đa thức để chuyển đổi
Xét số nhị phân sau:
N = d8d7d6d5d4d3d2d1.d-1d-2d-3
Ta đổi sang dạng đa thức:
N = d828+ d727 + d626+…+ d020 + d-12-1+ d-22-2 + d-32-3
Ta gom biểu thức trên lại:
N = (d822+ d721 + d620)26+ (d522+ d421 + d320)23+…+ (d-123+ d-221 + d-320
)2-3
= (d822+ d721 + d620) 82+(d522+ d421 + d320) 81 +…+ (d-123+ d-221 + d-320)
8-1
Nhận xét:
N là số có dạng hệ bát phân, bên trong dấu ngoặc () là số nhị phân có giá trị thập phân từ 0 đến 7 Như vậy có thể tính dễ dàng kết quả chuyển đổi từ hệ nhị phân sang bát phân và ngược lại Tương tự như vậy đối với các hệ khác
Đặt A = d822+ d721 + d620
B = d522+ d421 + d320
C = d222+ d121 + d020
X = d-123+ d-221 + d-220
Từ kết quả trên ta được:
N = A x 82 + B x 81 + … + Z x 8-1
= ABC.Z8
III Các phép tính trên số nhị phân:
Cũng tương tự như hệ thập phân, hệ nhị phân cũng có các phép tính trên nó Nhìn chung, hệ nào cũng đều có các phép tính, để sử dụng tốt các hệ điều đầu tiên
là phải biết các qui định, các phép toán và các qui tắc trên hệ đó Dưới đây là các phép tính trên hệ nhị phân
1 Phép cộng:
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 0 (nhớ 1)
Trang 6Ví dụ:
1011.011 +1100.101 11000.000
2 Phép Trừ:
0 - 0 = 0
0 - 1 = 1 (mượn 1)
1 - 0 = 1
1 - 1 = 0
Ví dụ:
1101.11 -111.01 0110.10
3 Phép nhân:
0 x 0 = 0
0 x 1 = 0
1 x 0 = 0
1 x 1 = 1
Ví dụ:
110.01
x 101 11001 00000 11001 1111101
Nhận xét:
Phép nhân thật sự là một dãy các phép cộng liên tiếp
4 Phép chia:
0 / 0 = (không định nghĩa)
0 / 1 = 0
1 / 0 = (không định nghĩa)
1 / 1 = 1
Trang 7Ví dụ:
11110 /101
0101 101 0000
Nhận xét:
Phép chia thật sự là một dãy các phép trừ liên tiếp Ngoài các phép tính trên, còn có các phép tính logic như not (phủ định), and (và), or (hay), xor (hoặc)…
Bảng chân trị các phép tính logic
1 1 0 0
1 0 1 0
0 0 1 1
1 0 0 0
1 1 1 0
0 1 1 0
Ví dụ:
1 Not
2 And
3 Or
4 Xor
IV Số nhị phân có dấu:
Trong các phần trên, chúng ta đã khảo sát về các hệ cơ số và các phép tính trên các hệ cơ số đó, nhưng chỉ là các phép tính trên số không dấu Trên thực tế, nhu cầu sử dụng trên các phép tính số có dấu là rất thiết thực Do đó, việc nghiên cứu các phép tính trên số có dấu là điều cần thiết
Đối với số nhị phân, số nhị phân có dấu được thể hiện dưới 3 dạng sau:
1010 0101
1100 1010 1000 1011 1010 1011 1010 1101 0111
Trang 81 Dạng dấu lượng:
Phương pháp này dùng bit cực trái là bit dấu
- Nếu bit này có giá trị 0 thì số đó là số dương
- Nếu bit này có giá trị 1 thì số đó là số âm
- Các bit còn lại chính là giá trị của số
Ví dụ: Xét dãy số có chiều dài 4 bit Theo qui định ta dùng bit cực trái làm bit dấu, các bit còn lại (3 bit) chính là biểu diễn giá trị trong khoảng từ -7 đến 7 của số đó Cụ thể như sau:
S=DNNN = Dấu(+/-)(Nx22 + Nx21 + Nx20) Với N = 1
Nếu D = 0 thì S = +7 Nếu D = 1 thì S = -7
Tổng quát:
Số nhị phân S= dn-1dn-2dn-3…d1d0 (chiều dài n bit) có trị thập phân là:
(-1)d n-1(dn-22n-2 + dn-32n-3 +…+ d020) và có giá trị trong khoảng:
1-2n-1 <=S <= 2n-1 – 1
2 Dạng bù 1:
Thông thường cách biểu diễn dạng dấu lượng được dùng cho con người, còn đối với máy tính người ta dùng theo 2 dạng biểu diễn bù
Dạng bù 1 dùng 2 cách biểu diễn cho 2 kiểu số âm và dương
- Đối với số dương, ta dùng dạng dấu lượng
- Đối với số âm, có bit cực trái bằng 1 Các bit còn lại chính là giá trị của số trong dãy số thập phân tương đương
Ví dụ 1: 610 được biểu diễn với chiều dài k=4 (4 bit) 01102
Ví dụ 2: số 1110 được biểu diễn dưới 2 dạng như sau
+1110 = 000010112 và –1110 = 111101002
Như vậy, với cách biểu diễn này số S = dn-1dn-2dn-3…d1d0 (n bit) có trị thập phân là:
(1-2n-1)(dn-12n-1 + dn-22n-2 +…+d020)
và có trị trong khoảng:
1-2n-1 <=S <= 2n-1-1
3 Dạng bù 2:
Tương tự như bù 1, số dương được biểu diễn dạng dấu lượng Số âm có bit cực trái bằng 1, các bit còn lại trong dãy là số nhị phân có trị thập phân tương đương: 2n-1-|S|
Như vậy, với cách biểu diễn này số S = dn-1dn-2dn-3…d1d0 (n bit) có trị thập phân là:
(1-2n-1)(dn-12n-1 + dn-22n-2 +…+d020)
và có trị trong khoảng:
-2n-1 <=S <= 2n-1-1
Trang 9Ví dụ:
Số dài 4 bit có trị từ -8 đến +7
Số dài 8 bit có trị từ -128 đến +127
Số dài 16 bit có trị từ -32768 đến +32767
4 Cách chuyển đổi từ số dương sang số âm:
Bù 1:
Đổi tất cả các bit 0 thành 1 và ngược lại
Ví dụ: Biểu diễn với chiều dài k=4
710 = 01112-> -7 = 10002
510 = 01012-> -5 = 01012
Bù 2:
Bắt đầu từ phải sang trái, giữ nguyên các bit cho đến khi gặp bit 1 đầu tiên (giữ nguyên bit này), sau đó kể từ bit bên trái trở đi Đổi tất cả các bit 0 thành 1 và ngược lại
Ví dụ: Biểu diễn với chiều dài k=8
4510 = 001011012-> 110100112
10810= 011011002 -> 100101002
5 Nhận xét:
Với phương pháp làm bù trên, khi thực hiện phép trừ 2 số ta có thể tính toán bằng cách dùng số thứ nhất cộng với bù của số thứ hai
Phép nhân các số nhị phân thật ra chính là một dãy các phép cộng liên tiếp
Phép chia các số nhị phân thật ra chính là một dãy các phép trừ liên tiếp
Tóm lại:
Với các nhận xét trên, để thiết kế các mạch điện tử thể hiện các phép toán cộng, trừ, nhân, chia thực chất chỉ cần thiết kế mạch cộng là đủ
V Cộng trừ số nhị phân có dấu:
1) Cộng trừ số bù 2:
Cho 2 số có chiều dài n bit, việc thực hiện phép cộng tương tự như phép cộng đối với số nhị phân bình thường, trong trường hợp có phát sinh bit nhớ khi cộng bit dấu thì ta loại bỏ Kết quả phép cộng nằm trong phạm vi –2n-1 đến 2n-1-1 Trường hợp tràn số thường xảy ra khi :
Kết quả không nằm trong phạm vi trên
Hai số cùng dấu khi cộng cho kết quả trái dấu
Ví dụ: với k=4 bit
2 -> 10010 kết quả đúng
Trang 10b 6 -> 0110
-(-4) -> +0100 (lấy bù 2)
10 -> 1010 kết quả sai
-2 -> 1110 kết quả đúng
2) Cộng trừ số bù 1:
Cách làm tương tự như cộng trừ số bù 2 nhưng thay vào đó khi phát sinh bit nhớ ta cộng bit nhớ cho dãy bit còn lại
Ví dụ: với k=5 bit
-(-13) -> +01101 (lấy bù 1)
+1
00111 Kết quả đúng
VI Các biểu diễn thập phân – mã nhị phân và các phép tính dựa trên số thập phân:
Do con người quen dùng hệ thập phân mà máy tính lại dùng hệ nhị phân, điều này gây không ít khó khăn cho con người Vì vậy, việc tìm ra bộ mã chung giữa con người và máy tính là một công việc cần thiết Bộ mã thập mã nhị ra đời nhằm đáp ứng những yêu cầu đó
Bộ mã thập mã nhị là một dãy bit biểu diễn các các ký số thập phân dưới dạng
mã nhị phân Cụ thể là bộ mã hoá thập mã nhị 8421BCD (binary - code decimal) Với bộ mã dạng này, mỗi chữ số thập phân sẽ được tách thành 4 bit Như vậy, đối với các số có nhiều chữ số sẽ hình thành 1 dãy bit tương ứng với độ dài là 4k (k chiều dài số)
Ví dụ :
Số 21410 được tách thành 3 nhóm 4 bit như sau:
0010 (=2) 0001 (= 1) 0100 (=4)
Số 53110 được tách thành 3 nhóm 4 bit như sau:
0101 (=5) 0011 (= 3) 0001 (=1) Ngoài cách mã hoá trên, người ta còn mã hoá theo nhiều cách khác như mã hoá
3 loại mã hoá dạng này được tạo bằng cách cộng thêm vào mỗi nhóm số một số 0011
Ví dụ: Số 510 được tách thành 1000 (0101 + 0011)
Ưu điểm của cách này là khi các bit 0 được đổi thành 1 thì ký số thập phân tương ứng X sẽ hoán đổi thành 9 –X Và đặt tính này được gọi là tự bù
Tuy nhiên, bộ mã thập mã nhị là tương đối thông dụng hiện nay Sau đây chúng
Trang 111) Phép cộng :
Xét phép cộng hai số 1110 và 4210
1110 = 0001 0001 +4210 = 0100 0010
5310 = 0101 0011
(=5) (=3)
Chú ý 1: Cũng có một số trường hợp sai do nhóm bit vượt quá trị tối đa 1001, người ta đưa ra cách sữa sai là cộng thêm kết quả với 0110
Ví dụ: Xét phép cộng hai số 4710 và 3610
4710 = 0100 0111 +3610 = 0011 0110
8310 = 0111 1101
(=7) (=13) Kết quả sai Sửa sai:
4710 = 0100 0111 +3610 = 0011 0110
8310 = 0111 1101 (=7)(=13)
+00000110 Số cộng thêm
1000 0011 dùng để sửa sai (=8)(=3) Kết quả đúng
Chú ý 2: Cũng có một số trường hợp kết quả không vượt quá 1001 nhưng vẫn sai
Ví dụ: Xét phép cộng hai số 2810 và 5910
2810 = 0010 1000 +5910 = 0101 1001
8710 = 1000 0001
(=8) (=1) Kết quả sai Sửa sai:
2810 = 0010 1000 +5910 = 0101 1001
8710 = 1000 0001
+0000 0110 Cộng thêm 0110
1000 0111 (=8)(=7) kết quả đúng
Trang 12Như vậy: Khi kết quả không hợp lệ hay bit nhớ được tạo khi cộng làm sai kết quả Để sửa sai ta công thêm 0110
2) Phép trừ:
Xét phép trừ hai số 6710 và 2310
6710 = 0110 0111 -2310 = 0010 0011
4410 = 0100 0100
(=4) (=4)
Tuy nhiên, cũng có một số trường hợp sai như phép công ở trên Để sửa sai ta trừ thêm 0110
Ví dụ: Xét phép trừ hai số 6110 và 3810
6110 = 0110 0001 -3810 = 0011 1000
2310 = 0010 1001
(=2) (=9) kết quả sai
Kết quả sai do khi mượn 1 bit bên trái ta mượn 1 trị là 16 (24) chứ không phải là
10 (như ta tưởng) Vì vậy ta phải trừ thêm cho 6 (0110) để được kết quả đúng
Sửa sai:
6110 = 0110 0001 -3810 = 0011 1000
2310 = 0010 1001 kết quả sai
-0000 0110 Trừ thêm 0110
0010 0011 (=2)(=3)
Như vậy: Đối với phép trừ cũng có một số trương hợp sai như phép cộng và ta
cũng sủa sai bằng cách lấy kết quả trừ thêm cho 0110 Còn đối với phép cộng
ta cộng kết quả thêm cho 0110
3) Cộng - trừ số thập phân có dấu:
Tương tự như cộng số nhị phân có dấu, nhưng ở đây ta dùng dấu lượng, bù chín hay bù 10 để thể hiện Dùng bit cực trái làm bit dấu và nếu trị của bit này bằng 0 chính là số dương, ngược lại số âm
Giả sử có số X có n ký số
Khi X >=0: Ký số 0 là ký số dấu, n-1 ký số còn lại chứa giá trị của X