Giáo trình Toán rời rạc Chương 2.3 - Pdf 88

o Biểu diễn số nguyên trong máy tính.
Trong máy tính mọi dữ liệu đều được lưu trữ bằng các tín hiệu nhò phân. Mô hình toán
học tương ứng cho cách lưu trữ đó là số học hệ đếm nhò phân. Trong hệ đếm này các dữ liệu
được biểu diễn bằng một dãy các số 0 và 1. Hơn nữa tài nguyên của máy tính là hữu hạn, các
thanh ghi của bộ xử lí hay chiều dài mỗi đơn vò bộ nhớ là hữu hạn, vì vậy ta chỉ xét đến cách
biểu diễn số bằng các thanh ghi có chiều dài hữu hạn mà thôi. Mặt khác với cùng một biểu diễn
nhò phân, các cách xử lí khác nhau đối với biểu diễn này sẽ cho ý nghóa dữ liệu khác nhau. Ví
dụ: Trong máy tính biểu diễn 0100 0001 có thể là số thập phân 65 hay là kí tự ‘A’ tuỳ theo cách
xử lí đối với biểu diễn này. Từ đó ta có khái niệm “Kiểu dữ liệu – Data type”: Một kiểu dữ liệu
là một cách biểu diễn dữ liệu trong máy tính đi kèm với phương thức mà máy tính xử lí cách biểu
diễn đó.
Để dễ dàng cho việc lập luận, sau đây ta giả sử dữ liệu được biểu diễn bằng một thanh
ghi 4 bit trong một máy tính giả đònh .
 Kiểu số nguyên không dấu:
Trước tiên ta xem xét cách biểu diễn số nguyên trong hệ thập phân (Decimal system).
Trong hệ thống này ta dùng 10 kí hiệu 0,1,2,3,4,5,6,7,8,9 và cách ghi theo thứ tự các chữ số để
biểu diễn giá trò số đó. Ví dụ:
75689 = 70000 + 5000 + 600 + 80 + 9
= 7.10
4
+ 5.10
3
+ 6.10
2
+ 8.10
1
+ 9.10
0
Tổng quát ta có:
01232n1nn
aaaa...aaa

i
i
2.a
)
dec
trong đó:

i=
n..0
: a
i

{ }
1,0∈
Vậy trong hệ này, ta có:
101110
bin
=1.2
5
+ 0.2
4
+ 1.2
3
+ 1.2
2
+ 1.2
1
+ 0.2
0


bin
+1010
bin
= ?
bin
(Tràn số. Không thể biểu diễn được với 4 bit)
- Không có cách biểu diễn: 7
dec
– 10
dec
= ? (Số âm).
Vấn đề tràn số không thể giải quyết được trừ khi phải mở rộng độ dài thanh ghi. Chẳng hạn, vì
2
15
–1 = 32767 < 60032 < 2
16
–1 = 65535 nên muốn biểu diễn số 60032
dec
ít nhất chiều dài của
thanh ghi phải là 16 bit. Nếu không mở rộng thanh ghi (nghóa là chuyển sang một kiểu dữ liệu
khác) kết quả tính toán có thể đem lại nhiều bất ngờ. Sử dụng lại ví dụ trên ta thấy phép cộng:
1 1
0 1 1 1
+
1 0 1 0
1 0 0 0 1
cho kết quả của phép cộng là: 0001. (Không đúng!)
Về vấn đề số âm :
Để khảo sát số âm trước hết chúng ta khảo sát phép trừ. Sử dụng cách trừ như thông thường với
phép trừ thực hiện lần lượt từ cột bên phải qua ta thấy rằng khi ta trừ 1 cho 0 ta được 1, trừ 1 cho

11
Một mặt thực hiện phép toán trừ như vậy gây ra rất nhiều bất tiện. Mặt khác khi phép trừ cho
một kết quả âm buộc ta phải đònh nghóa một kiểu dữ liệu có thể biểu diễn được số nguyên âm.
Ta có thể biểu diễn số âm bằng cách dùng 1 bit tận cùng bên trái của thanh ghi làm bit dấu.
Theo qui ước nếu bit này bằng 0 thì đây là số dương và nếu bit này bằng 1 thì đây là số âm. Ví
dụ 0101
bin
là số +5 còn 1111
bin
là số –7. Tuy nhiên khi đó thực hiện phép trừ giữa hai số “đại số”
A và B đòi hỏi một qui tắc trừ khá phức tạp vì cùng lúc phải xét đến dấu của A, B và độ lớn
tương đối giữa A và B chưa kể đến việc phải thiết kế một mạch điện tử riêng biệt dùng để thực
hiện phép trừ. Câu hỏi đặt ra là có thể nào chỉ cần thiết kế một mạch điện tử dùng được cho cả
hai phép toán cộng và trừ. Câu trả lời là có thể.
Nhưng trước hết ta hãy quan sát ví dụ sau đây trong hệ thập phân, trong đó ta đã thay việc thực
hiện quá trình làm toán trừ bằng một quá trình “cộng” tương đương:
901
943
854

được thay bằng
901
9011
1
056
854
+
+
Ta thấy rằng, thay vì trừ cho 349 ta đã cộng 458 với 650 là số bù 9 của số 349, rồi lại cộng với 1
để được kết quả 1109. Kết quả này bỏ đi số 1 tận cùng bên trái sẽ được 109 là kết quả của phép

số 1 tận cùng
bên trái
Ví dụ: x = 5
dec
= 0101
bin
Lấy bù 1: 1010
Cộng 1 được số bù 2: 1011
Khi đó ta có: (-x) = 1011
bin
.
Thử lại: 0101
+ 1011
1 0000
Bảng sau đây cho thấy quan hệ giữa các số bù 2 khi dùng 4 bit để biểu diễn số nguyên:
Thập phân Biểu diễn nhò phân Thập phân
Kiểu
dữ
liệu
có dấu
Kiểu dữ liệu
không dấu
0000
0 0
-1 15
1111 0001
1 1
-2 14
1110 0010
2 2

và trừ như bình thường. Ví dụ:
5
dec
– 3
dec
= 0101
bin
+ 1101
bin
= 0010
bin
= +2
dec
-5
dec
+ 3
dec
= 1011
bin
+ 0011
bin
= 1110
bin
= -2
dec
-5
dec
- 2
dec
= 1011

được là:
(Maximum) 111111111.111111
bin
= (2
9
-1).(1-2
- 6
)
dec
= 511.984375
dec
(Minimum) 000000000.000001
bin
= 2
-6
= 0.015625
dec
Với cách hiện thực này ta gặp phải mấy vấn đề sau:
i) Không thể biểu diễn số thực khác 0 có giá trò tuyệt đối nhỏ hơn 0.015625
ii) Không thể biểu diễn số thực có giá trò tuyệt đối lớn hơn 511.984375
iii) Mật độ biểu diễn số thực: Giữa hai số thực bất kì x và y (x

y) luôn tồn tại một số
thực khác (eg: (x+y)/2) cho dù x có gần y đến thế nào đi nữa, ie: số số thực tồn tại giữa x và y là
vô hạn. Giữa hai số thực 0 và 511.984375 là vô hạn các số thực có giá trò trung gian, nhưng theo
cách biểu diễn trên giữa số 0 và số 511.984375 chỉ có thể hiện thực đúng 2
15
= 65535 số thực
không âm khác nhau. Nói cách khác độ chính xác của số được biểu diễn bò ảnh hưởng nghiêm
trọng!


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status