Cấu trúc máy tính
Chương 2 BIỂU DIỄN DỮ LIỆU & SỐ HỌC MÁY TÍNH
1
Nội dung chương 2
2.1. C|c hệ đếm cơ bản 2.2. M~ hóa v{ lưu trữ dữ liệu trong m|y tính 2.3. Biểu diễn số nguyên 2.4. C|c phép to|n số học với số nguyên 2.5. Biểu diễn số thực 2.6. Biểu diễn kí tự
2
Các hệ đếm cơ bản
Về mặt to|n học, ta có thể biểu diễn số theo hệ đếm
cơ số bất kì.
Khi nghiên cứu về m|y tính, ta chỉ quan t}m đến c|c
hệ đếm sau đ}y: Hệ thập ph}n (Decimal System) → con người sử dụng Hệ nhị ph}n (Binary System) → m|y tính sử dụng Hệ mười s|u (Hexadecimal System) → dùng để viết gọn cho
số nhị ph}n
3
Hệ thập phân
Sử dụng 10 chữ số: 0,1,2,3,4,5,6,7,8,9 để biểu diễn số Dùng n chữ số thập ph}n có thể biểu diễn được 10n gi| trị
nguyên khác nhau: 00...000 = 0 .... 99...999 = 10n-1
Giả sử một số A được biểu diễn dưới dạng:
A = an an-1 … a1 a0 . a-1 a-2 … a-m
Gi| trị của A được hiểu như sau:
4
Ví dụ
Số thập ph}n 472.38 có gi| trị được hiểu như sau: 472.38 = 4 x 102 + 7 x 101 + 2 x 100 + 3 x 10-1 + 8 x 10-2
5
Mở rộng cho hệ cơ số r (r>1)
Sử dụng r chữ số có gi| trị riêng từ 0 đến r-1 để biểu diễn số Giả sử có số A được biểu diễn bằng c|c chữ số của hệ đếm theo
cơ số r như sau: A = an an-1 … a1 a0 . a-1 a-2 … a-m
Gi| trị của A l{:
Một chuỗi n chữ số của hệ đếm cơ số r sẽ biểu
diễn được rn giá trị nguyên khác nhau.
6
Hệ nhị phân
Sử dụng 2 chữ số: 0,1 Chữ số nhị ph}n gọi l{ bit (binary digit) Bit l{ đơn vị thông tin nhỏ nhất Dùng n bit có thể biểu diễn được 2n gi| trị kh|c nhau:
...
00...000 = 0 11...111 = 2n-1
Giả sử có số A được biểu diễn theo hệ nhị ph}n như sau:
A = an an-1 … a1 a0 . a-1 a-2 … a-m
Với ai l{ c|c chữ số nhị ph}n, khi đó gi| trị của A l{:
7
Ví dụ
Số nhị ph}n 1101001.1011 có gi| trị được x|c định
như sau: 1101001.1011(2) = 26 + 25 + 23 + 20 + 2-1 + 2-3 + 2-4 = 64 + 32 + 8 + 1 + 0.5 + 0.125 + 0.0625 = 105.6875(10)
8
Đổi số thập phân sang nhị phân
Thực hiện chuyển đổi phần nguyên v{ phần lẻ riêng. Chuyển đổi phần nguyên:
Cách 1: chia dần số đó cho 2, x|c định c|c phần dư, rồi viết c|c số dư
theo chiều ngược lại.
Ví dụ: chuyển đổi 105(10) sang hệ nhị ph}n ta l{m như sau: 1 105 : 2 = 52 dư 0 52 : 2 = 26 dư 0 26 : 2 = 13 dư 1 13 : 2 = 6 dư 0 = 3 6 : 2 dư 1 = 1 3 : 2 dư 1 dư = 0 1 : 2 Như vậy, ta có: 105(10) = 1101001(2)
9
Đổi số thập phân sang nhị phân
Chuyển đổi phần nguyên (tiếp):
Cách 2: ph}n tích số đó th{nh tổng c|c lũy thừa của 2, sau đó dựa v{o
c|c số mũ để x|c định dạng biểu diễn nhị ph}n. Ví dụ: 105 = 64 + 32 + 8 + 1 = 26 + 25 + 23 + 20 105(10) = 1101001(2)
Chuyển đổi phần lẻ:
Nh}n phần lẻ với 2 rồi lấy phần nguyên ... Sau đó viết c|c phần nguyên
theo chiều thuận.
= = = =
Ví dụ: chuyển đổi số 0.6875(10) sang hệ nhị ph}n:
1.3750 phần nguyên = 1 0.6875 x 2 phần nguyên = 0 0.750 x 2 0.375 phần nguyên = 1 1.50 x 2 0.75 phần nguyên = 1 1.0 x 2 0.5 Kết quả l{: 0.6875(10) = 0.1011(2)
10
3. Hệ mười sáu (Hexa)
Sử dụng 16 chữ số, kí hiệu
như sau:
0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F Dùng để viết gọn cho số nhị
phân.
11
Một số ví dụ
12 tức l{ C 8 10 tức l{ A 3
Nhị ph}n Hexa: 11 1011 1110 0110.01101(2) = 3BE6.68(16) Hexa Nhị ph}n: 3E8(16) = 11 1110 1000(2) Thập ph}n Hexa: 14988 ? dư 936 = 14988 : 16 dư 58 = 936 : 16 dư 3 = 58 : 16 dư 0 = 3 : 16 Như vậy, ta có: 14988(10) = 3A8C(16) 3A8C ?
Hexa Thập ph}n:
3A8C (16) = 3 x 163 + 10 x 162 + 8 x 161 +12 x 160
= 12288 + 2560 + 128 + 12 = 14988(10)
12
Chuyển đổi nhanh
105 = 6x16 + 9 = 69(16)= 110 1001 35 = 2x16 + 3 = 23(16) = 10 0011
13
Cộng trừ số Hexa
14
Nội dung chương 2
2.1. C|c hệ đếm cơ bản 2.2. M~ hóa v{ lưu trữ dữ liệu trong m|y tính 2.3. Biểu diễn số nguyên 2.4. C|c phép to|n số học với số nguyên 2.5. Biểu diễn số thực 2.6. Biểu diễn kí tự
15
Mã hóa và lưu trữ dữ liệu
1. Nguyên tắc chung về m~ hóa dữ liệu 2. Lưu trữ thông tin trong bộ nhớ chính
16
1. Nguyên tắc chung về mã hóa dữ liệu
Mọi dữ liệu đưa v{o m|y tính đều phải được m~ hóa
th{nh số nhị ph}n.
C|c loại dữ liệu :
Dữ liệu nh}n tạo: do con người quy ước Dữ liệu tự nhiên: tồn tại kh|ch quan với con người
17
Nguyên tắc mã hóa dữ liệu
M~ hóa dữ liệu nh}n tạo:
Dữ liệu số nguyên: m~ hóa theo chuẩn qui ước Dữ liệu số thực: m~ hóa bằng số dấu chấm động Dữ liệu ký tự: m~ hóa theo bộ m~ ký tự
18
Nguyên tắc mã hóa dữ liệu (tiếp)
M~ hóa dữ liệu tự nhiên:
Phổ biến l{ c|c tín hiệu vật lý như }m thanh, hình ảnh, ... C|c dữ liệu tự nhiên cần phải được số hóa (digitalized) trước khi đưa
vào trong máy tính.
Sơ đồ m~ hóa v{ t|i tạo tín hiệu vật lý:
19
Độ dài từ dữ liệu
Độ d{i từ dữ liệu:
L{ số bit được sử dụng để m~ hóa loại dữ liệu tương ứng Trong thực tế, độ d{i từ dữ liệu thường l{ bội số của 8 bit, ví
dụ: 8, 16, 32, 64 bit
MB = 220 KB = 230 Byte
1GB = 210 4GB = 232 Byte
20
2. Lưu trữ thông tin trong bộ nhớ chính
Bộ nhớ chính thường được tổ chức theo Byte Độ d{i từ dữ liệu có thể chiếm 1 hoặc nhiều Byte Cần phải biết thứ tự lưu trữ c|c byte trong bộ nhớ
chính: Lưu trữ kiểu đầu nhỏ (Little-endian) Lưu trữ kiểu đầu to (Big-endian)
Little-endian: Byte có ý nghĩa thấp hơn được lưu trữ
trong bộ nhớ ở vị trí có địa chỉ nhỏ hơn.
Big-endian: Byte có ý nghĩa thấp hơn được lưu trữ
trong bộ nhớ ở vị trí có địa chỉ lớn hơn.
21
Ví dụ
Intel 80x86, Pentium: Little-endian Motorola 680x0, c|c bộ xử lý RISC: Big-endian Power PC, Itanium: hỗ trợ cả hai (Bi-endian)
22
Bài tập
Dữ liệu 16 bit có gi| trị l{ 5B9D được lưu trữ v{o bộ nhớ chính tổ chức theo kiểu Little-endian bắt đầu từ byte nhớ có địa chỉ l{ 1234. H~y x|c định nội dung c|c byte nhớ chứa lưu trữ dữ liệu đó dưới dạng nhị ph}n.
23
Nội dung chương 2
2.1. C|c hệ đếm cơ bản 2.2. M~ hóa v{ lưu trữ dữ liệu trong m|y tính 2.3. Biểu diễn số nguyên 2.4. C|c phép to|n số học với số nguyên 2.5. Biểu diễn số thực 2.6. Biểu diễn kí tự
24
Biểu diễn số nguyên
1. Số nguyên không dấu 2. Số nguyên có dấu 3. Biểu diễn số nguyên theo m~ BCD
25
1. Số nguyên không dấu
Dạng tổng qu|t: giả sử dùng n bit để biểu diễn cho một số
nguyên không dấu A:
an-1an-2...a3a2a1a0
Gi| trị của A được tính như sau:
Dải biểu diễn của A: từ 0 đến 2n-1
26
Các ví dụ
Ví dụ 1. Biểu diễn c|c số nguyên không dấu sau đ}y
bằng 8 bit:
A = 45
B = 156
A = 45 = 32 + 8 + 4 + 1 = 25 + 23 + 22 + 20
B = 156 = 128 + 16 + 8 + 4 = 27 + 24 + 23 + 22
Giải: A = 0010 1101 B = 1001 1100
27
Các ví dụ (tiếp)
Ví dụ 2. Cho c|c số nguyên không dấu X, Y được biểu
diễn bằng 8 bit như sau: X = 0010 1011 Y = 1001 0110 Giải:
X = 0010 1011 = 25 + 23 + 21 + 20
= 32 + 8 + 2 + 1 = 43
Y = 1001 0110 = 27 + 24 + 22 + 21
= 128 + 16 + 4 + 2 = 150
28
Trường hợp cụ thể: với n = 8 bit
Trục số học máy tính:
0
0000 0000 =
1 2 3
.....
0000 0001 = 0000 0010 = 0000 0011 = 1111 1111 =
255
Dải biểu diễn l{ [0, 255] Trục số học:
29
Với n = 8 bit
Kiểu dữ liệu tương ứng trong Turbo C l{ kiểu
unsigned char.
Ví dụ:
1111 1111
+ 0000 0001
1 0000 0000
unsigned char a;
a = 255; a = a + 1; printf(“%d”,a); //Kết quả sai l{ 0
KQ sai: 255 + 1 = 0 ? (do phép cộng bị nhớ ra ngoài)
30
Với n = 16 bit, 32 bit, 64 bit
n = 16 bit:
Dải biểu diễn l{ [0, 65535] Kiểu dữ liệu tương ứng trong Turbo C l{ kiểu unsigned int Ví dụ:
unsigned int a; a = 0xffff; a = a + 1; printf(“%d”,a); n = 32 bit:
Dải biểu diễn l{ [0, 232-1]
n = 64 bit:
Dải biểu diễn l{ [0, 264-1]
31
2. Số nguyên có dấu
a. Khái niệm về số bù Số bù chín v{ số bù mười (hệ thập ph}n):
Giả sử có một số nguyên thập ph}n A được biểu diễn bởi n
chữ số thập ph}n. Khi đó ta có: Số bù chín của A = (10n - 1) - A Số bù mười của A = 10n - A NX: Số bù mười = Số bù chín + 1
Ví dụ:
Xét n = 4 chữ số, A = 2874 Số bù chín của A = (104 - 1) - 2874 = 7125 Số bù mười của A = 104 - 2874 = 7126
32
Khái niệm về số bù
Số bù một v{ số bù hai (hệ nhị ph}n):
Giả sử có một số nguyên nhị ph}n A được biểu diễn bởi n
bit. Khi đó ta có:
Số bù một của A = (2n - 1) - A Số bù hai của A = 2n - A NX: Số bù hai = Số bù một + 1
Ví dụ:
Xét n = 4 bit, A = 0110 Số bù một của A = (24 - 1) - 0110 = 1001 Số bù hai của A = 24 - 0110 = 1010
33
Nhận xét
Có thể tìm số bù một của A bằng c|ch đảo tất cả c|c
bit của A
Số bù hai của A = Số bù một của A + 1
34
Nhận xét
=0110 0101 =1001 1010 + 1
A = 0110 0101
1 0000 0000 = 0 (bỏ qua bit nhớ ra ngo{i)
Ví dụ: cho A Số bù một của A Số bù hai của A =1001 1011 Nhận xét Số bù hai của A += 1001 1011 ->Số bù hai của A=-A
35
Biểu diễn số nguyên có dấu
b. Biểu diễn số nguyên có dấu bằng số bù hai Dùng n bit biểu diễn số nguyên có dấu A:
an-1an-2...a2a1a0
Với số dương: Bit an-1 = 0 C|c bit còn lại biểu diễn độ lớn của số dương đó
Dạng tổng qu|t của số dương: 0an-2...a2a1a0 Gi| trị của số dương:
Dải biểu diễn của số dương: [0, 2n-1-1]
36
Biểu diễn số nguyên có dấu (tiếp)
Với số }m:
Được biểu diễn bằng số bù hai của số dương tương ứng Bit an-1 = 1
Dạng tổng qu|t của số }m: 1an-2...a2a1a0 Gi| trị của số }m:
Dải biểu diễn của số }m: [-2n-1, -1]
Dải biểu diễn của số nguyên có dấu n bit l{ [-2n-1, 2n-1-1]
37
Biểu diễn số nguyên có dấu (tiếp)
Dạng tổng qu|t của số nguyên có dấu A:
an-1an-2...a2a1a0
Gi| trị của A được x|c định như sau:
Dải biểu diễn: [-2n-1, 2n-1-1]
38
Các ví dụ
A = +50
B = -70
A = +50 = 32 + 16 + 2 = 25 + 24 + 21
Ví dụ 1. Biểu diễn c|c số nguyên có dấu sau đ}y bằng 8 bit Giải: A = 0011 0010
B = -70 Ta có: +70 = 64 + 4 + 2 = 26 + 22 + 21
+70 = 0100 0110 Số bù 1 = 1011 1001 1 + Số bù 2 = 1011 1010
B = 1011 1010
39
Các ví dụ (tiếp)
Ví dụ 2. X|c định gi| trị của c|c số nguyên có dấu 8 bit
A = 0101 0110 B = 1101 0010
sau đ}y: Giải:
A = 26 + 24 + 22 + 21 = 64 + 16 + 4 + 2 = +86 B = -27 + 26 + 24 + 21 = -128 + 64 + 16 + 2 = -46
40
Trường hợp cụ thể: với n = 8 bit
Trục số học máy tính:
0000 0000 = 0
0000 0001 = +1 0000 0010 = +2 ….. 0111 1111 = +127 1000 0000 = -128 1000 0001 = -127 ..... 1111 1110 = -2 1111 1111 = -1
Dải biểu diễn l{ [-128, +127] Trục số học:
41
Với n = 8 bit (tiếp)
Kiểu dữ liệu tương ứng trong Turbo C l{ kiểu char. Ví dụ:
0111 1111
+ 0000 0001
1000 0000
char a;
a = 127; a = a + 1; printf(“%d”,a); //Kết quả sai l{ -128
KQ sai: 127 + 1 = -128 ? (do phép cộng bị tràn số học)
42
Với n = 16 bit, 32 bit, 64 bit
n = 16 bit:
Dải biểu diễn l{ [-32768, +32767] Kiểu dữ liệu tương ứng trong Turbo C l{ kiểu int
n = 32 bit:
Dải biểu diễn l{ [-231, 231-1] Kiểu dữ liệu tương ứng trong Turbo C l{ kiểu long int
n = 64 bit:
Dải biểu diễn l{ [-263, 263-1]
43
Chuyển từ 8 bit sang 16 bit
(16 bit)
(16 bit)
Với số dương: +35 = 0010 0011 (8 bit) +35 = 0000 0000 0010 0011 Thêm 8 bit 0 vào bên trái Với số }m: -79 = 1011 0001 (8 bit) -79 = 1111 1111 1011 0001 Thêm 8 bit 1 vào bên trái Kết luận: mở rộng sang bên tr|i 8 bit bằng bit dấu
44
3. Biểu diễn số nguyên theo mã BCD
BCD – Binary Coded Decimal (M~ hóa số nguyên thập
ph}n bằng nhị ph}n)
Dùng 4 bit để m~ hóa cho c|c chữ số thập ph}n từ 0
đến 9
0 0000 1 0001 2 0010 3 0011 4 0100
5 0101 6 0110 7 0111 8 1000 9 1001
Có 6 tổ hợp không sử dụng:
1010, 1011, 1100, 1101, 1110, 1111
45
Ví dụ về số BCD
35 0011 0101BCD 79 0111 1001BCD 2281 0010 0010 1000 0001BCD 1304 0001 0011 0000 0100BCD
46
Phép cộng số BCD
kết quả sai hiệu chỉnh
35 0011 0101BCD + 24 + 0010 0100BCD 59 0101 1001BCD Kết quả đúng (không phải hiệu chỉnh) 89 1000 1001BCD + 52 + 0101 0010BCD 141 1101 1011 + 0110 0110 0001 0100 0001BCD kết quả đúng 1 4 1 Hiệu chỉnh: cộng thêm 6 ở những h{ng có nhớ
47
Các kiểu lưu trữ số BCD
BCD dạng nén (Packed BCD): Hai số BCD được lưu trữ trong 1
Byte. Ví dụ số 52 được lưu trữ như sau:
BCD dạng không nén (Unpacked BCD): Mỗi số BCD được lưu
trữ trong 4 bit thấp của mỗi Byte. Ví dụ số 52 được lưu trữ như sau:
48
Nội dung chương 2
2.1. C|c hệ đếm cơ bản 2.2. M~ hóa v{ lưu trữ dữ liệu trong m|y tính 2.3. Biểu diễn số nguyên 2.4. C|c phép to|n số học với số nguyên 2.5. Biểu diễn số thực 2.6. Biểu diễn kí tự
49
Các phép toán số học với số nguyên
1. Bộ cộng 2. Cộng số nguyên không dấu 3. Cộng/trừ số nguyên có dấu 4. Nh}n số nguyên 5. Chia số nguyên
50
1. Bộ cộng
Bộ cộng 1 bit to{n phần (Full Adder)
51
Bộ cộng (tiếp)
Bộ cộng n bit
52
2. Cộng số nguyên không dấu
Nguyên tắc: Sử dụng bộ cộng n bit để cộng 2 số
nguyên không dấu n bit, kết quả nhận được cũng l{ n bit. Nếu không có nhớ ra khỏi bit cao nhất (Cout=0) thì kết quả
nhận được l{ đúng.
Nếu có nhớ ra khỏi bit cao nhất (Cout=1) thì kết quả nhận được l{ sai, khi đó đ~ xảy ra hiện tượng nhớ ra ngo{i. Hiện tượng nhớ ra ngoài (Carry-out) xảy ra khi tổng
của 2 số nguyên không dấu n bit > 2n-1
53
VD cộng số nguyên không dấu 8 bit
Trường hợp không xảy ra carry-out:
X = 1001 0110 = 150 Y = 0001 0011 = 19 S = 1010 1001 = 169 Cout = 0
Trường hợp có xảy ra carry-out:
unsigned char x, y, s;
x = 197;
X = 1100 0101 = 197 Y = 0100 0110 = 70 S = 0000 1011 267 Cout = 1 carry-out
(KQ sai = 23 + 21 + 20 = 11)
y = 70; s = x + y; printf(“%d”,s);
54
3. Cộng/trừ số nguyên có dấu
Khi cộng hai số nguyên có dấu n bit, ta không quan t}m đến bit Cout v{ kết quả nhận được cũng l{ n bit. Cộng hai số kh|c dấu: kết quả luôn đúng Cộng hai số cùng dấu:
Nếu tổng nhận được cùng dấu với 2 số hạng thì kết quả l{ đúng Nếu tổng nhận được kh|c dấu với 2 số hạng thì đ~ xảy ra hiện tượng
tràn số học (Overflow) v{ kết quả nhận được l{ sai
Tr{n số học xảy ra khi tổng thực sự của hai số nằm ngo{i
dải biểu diễn của số nguyên có dấu n bit:
[-2n-1, 2n-1-1]
55
Phép trừ số nguyên có dấu
Nguyên tắc thực hiện phép trừ:
Ta có: X – Y = X + (-Y) C|ch thực hiện: lấy X cộng với số bù 2 của Y
56
Ví dụ cộng 2 số nguyên có dấu (không tràn)
57
Ví dụ cộng 2 số nguyên có dấu (Overflow)
58
4. Nhân số nguyên
a. Nh}n số nguyên không dấu b. Nh}n số nguyên có dấu
59
a. Nhân số nguyên không dấu
C|c tích riêng phần được x|c định như sau: Nếu bit của số nh}n = 0 → tích riêng phần = 0 Nếu bit của số nh}n = 1 → tích riêng phần = số bị nh}n Tích riêng phần tiếp theo được dịch tr|i 1 bit so với tích riêng phần
trước đó
Tích = tổng c|c tích riêng phần Nh}n 2 số nguyên n bit, tích có độ d{i 2n bit → không tr{n
60
Bộ nhân số nguyên không dấu
61
Lưu đồ thực hiện
62
Ví dụ nhân số nguyên không dấu
M Q
1011 (11 - Số bị nhân) 1101 (13 - Số nhân)
= = = 1000 1111 (143 - Tích)
A Q 0000 1101 Các giá trị khởi đầu
C 0 + 1011 0 0
1011 1101 A ¬ A + M 0101 1110 Dịch phải
0010 1111 Dịch phải
1101 1111 A ¬ A + M 0110 1111 Dịch phải
0 + 1011 0 0 + 1011 1 0
0001 1111 A ¬ A + M 1000 1111 Dịch phải
63
b. Nhân số nguyên có dấu
Sử dụng thuật giải nh}n không dấu:
Bước 1: Chuyển đổi số nh}n v{ số bị nh}n th{nh số dương
tương ứng.
Bước 2: Nhân 2 số bằng thuật giải nh}n số nguyên không
dấu → được tích 2 số dương. Bước 3: Hiệu chỉnh dấu của tích:
Nếu 2 thừa số ban đầu cùng dấu thì tích nhận được ở bước 2 l{ kết
quả cần tính.
Nếu 2 thừa số ban đầu kh|c dấu nhau thì kết quả l{ số bù 2 của tích
nhận được ở bước 2.
64
Nhân số nguyên có dấu
Sử dụng thuật giải Booth:
Với số nh}n dương:
Ta có: 2i + 2i-1 + … + 2j = 2i+1 - 2j (với ij) VD: M * 01110010 = M * (27 – 24 + 22 – 21) Quy tắc: duyệt từ tr|i sang phải:
Nếu gặp 10 thì trừ A đi M rồi dịch phải Nếu gặp 01 thì cộng A với M rồi dịch phải Nếu gặp 00 hay 11 thì chỉ dịch phải
Với số nh}n }m:
Ta có:
11…10ak-1ak-2…a0 = -2n-1 + 2n-2 + … + 2k+1 + ak-12k-1 + … + a020
= -2n-1 + 2n-1 - 2k+1 + ak-12k-1 + … + a020 -2k+1 ứng với bit 10 nên vẫn đảm bảo quy tắc ở TH trên
65
Lưu đồ thực hiện thuật toán Booth
66
Ví dụ về thuật toán Booth
67
5. Chia số nguyên
a. Chia số nguyên không dấu b. Chia số nguyên có dấu
68
a. Chia số nguyên không dấu
Ví dụ:
69
Bộ chia số nguyên không dấu
70
Lưu đồ thực hiện
71
b. Chia số nguyên có dấu
Bước 1: Chuyển đổi số chia v{ số bị chia th{nh số
dương tương ứng
Bước 2: Sử dụng thuật giải chia số nguyên không dấu để chia 2 số dương, kết quả nhận được l{ thương Q v{ phần dư R đều dương
Bước 3: Hiệu chỉnh dấu kết quả theo quy tắc sau:
72
Nội dung chương 2
2.1. C|c hệ đếm cơ bản 2.2. M~ hóa v{ lưu trữ dữ liệu trong m|y tính 2.3. Biểu diễn số nguyên 2.4. C|c phép to|n số học với số nguyên 2.5. Biểu diễn số thực 2.6. Biểu diễn kí tự
73
Biểu diễn số thực
1. Kh|i niệm về số dấu chấm tĩnh 2. Kh|i niệm về số dấu chấm động 3. Chuẩn IEEE 754/85
74
Biểu diễn số thực
Quy ước: "dấu chấm" (point) được hiểu l{ kí hiệu
ngăn c|ch giữa phần nguyên v{ phần lẻ của 1 số thực.
Có 2 c|ch biểu diễn số thực trong m|y tính:
Só dá u chá m tĩnh (fixed-point number):
Dấu chấm l{ cố định (số bit d{nh cho phần nguyên v{ phần lẻ l{ cố
định)
Dù ng trong cá c bo
̣ vi xử lý hay vi đièu khiẻn thế hệ cũ .
Só dá u chá m đo
̣ ng (floating-point number):
Dấu chấm không cố định Dù ng trong cá c bo
̣ vi xử lý hie
̣n nay, có đo
̣ chính xá c cao hơn.
75
1. Khái niệm về số dấu chấm tĩnh
Số bit d{nh cho phần nguyên v{ số bit phần lẻ l{ cố
định.
Giả sử rằng: U(a,b) là ta
̣ p cá c só dá u chá m tĩnh không dấu có a bit trướ c
dá u chá m và b bit sau dá u chá m.
A(a,b) là ta
̣ p cá c só dá u chá m tĩnh có dấu có a bit (không kẻ
bit dá u) trướ c dá u chá m và b bit sau dá u chá m.
76
Số dấu chấm tĩnh không dấu
Khoảng x|c định của số dấu chấm tĩnh không dấu: [0,
2a - 2-b]
Ví dụ:
Dùng 8 bit để m~ hóa cho kiểu số dấu chấm tĩnh, trong đó
có 2 bit d{nh cho phần lẻ. Khoảng x|c định của kiểu dữ liệu này là: 0 R 26 – 2-2 = 63.75
VD: gi| trị của 101011.11 = 10101111 x 2-2 = 43.75
77
Số dấu chấm tĩnh có dấu
Khoảng x|c định của số dấu chấm tĩnh có dấu:
[-2a, 2a - 2-b]
Ví dụ:
̣ p cá c só chấm tĩnh thuo
̣ c A(5,2) nà m trong
Dù ng 8 bit đẻ biẻu diẽn só chá m tĩnh có dá u với a=5, b=2 Ta đượ c ta khoả ng: [-25, 25 – 2-2] hay [-32, 31.75]
78
Đặc điểm của số dấu chấm tĩnh
C|c phép to|n thực hiện nhanh. Độ chính x|c khi thực hiện c|c phép to|n không cao,
̣t là với phép tính nhân.
̣ c bie đa Ví dụ:
Khi thực hiện phép nh}n ta cần phải có thêm một số lượng
bit nhất định để biểu diễn kết quả.
Đó i vớ i só không dá u:
U(a1, b1) x U(a2, b2) = U(a1 + a2, b1 + b2)
Đó i vớ i só có dá u:
A(a1, b1) x A(a2, b2) = A(a1 + a2 + 1, b1 + b2)
79
2. Khái niệm về số dấu chấm động
Floating Point Number biểu diễn cho số thực Một số thực X được biểu diễn theo kiểu số dấu chấm
động như sau: X = M * RE
Trong đó:
M l{ phần định trị (Mantissa) R l{ cơ số (Radix) E l{ phần mũ (Exponent)
Với R cố định thì để lưu trữ X ta chỉ cần lưu trữ M v{ E
(dưới dạng số nguyên)
80
3. Chuẩn IEEE 754/85
L{ chuẩn m~ hóa số dấu chấm động Cơ số R = 2 Có c|c dạng cơ bản:
Khuôn dạng m~ hóa:
81
Dạng có độ chính x|c đơn, 32-bit Dạng có độ chính x|c kép, 64-bit Dạng có độ chính x|c kép mở rộng, 80-bit
Khuôn dạng mã hóa
S l{ bit dấu, S=0 đó l{ số dương, S=1 đó l{ số }m. e l{ m~ lệch (excess) của phần mũ E, tức l{: E = e – b Trong đó b l{ độ lệch (bias):
Dạng 32-bit : b = 127, hay E = e - 127 Dạng 64-bit : b = 1023, hay E = e - 1023 Dạng 80-bit : b = 16383, hay E = e - 16383
m l{ c|c bit phần lẻ của phần định trị M, phần định trị được
ngầm định như sau:
M = 1.m
Công thức x|c định gi| trị của số thực tương ứng l{:
X = (-1)S x 1.m x 2e-b
82
Ví dụ về số dấu chấm động
Ví dụ 1: Có một số thực X có dạng biểu diễn nhị ph}n
theo chuẩn IEEE 754 dạng 32 bit như sau:
1100 0001 0101 0110 0000 0000 0000 0000
X|c định gi| trị thập ph}n của số thực đó. Giải:
S = 1 X l{ số }m e = 1000 0010 = 130 m = 10101100...00 Vậy X = (-1)1 x 1.10101100...00 x 2130-127
= -1.101011 x 23 = -1101.011 = -13.375
83
Ví dụ về số dấu chấm động (tiếp)
Ví dụ 2: X|c định gi| trị thập ph}n của số thực X có
dạng biểu diễn theo chuẩn IEEE 754 dạng 32 bit như sau:
0011 1111 1000 0000 0000 0000 0000 0000
Giải:
84
Ví dụ về số dấu chấm động (tiếp)
Ví dụ 3: Biểu diễn số thực X = 9.6875 về dạng số dấu
chấm động theo chuẩn IEEE 754 dạng 32 bit
Giải: X = 9.6875(10) = 1001.1011(2) = 1.0011011 x 23 Ta có:
S = 0 vì đ}y l{ số dương E = e – 127 nên e = 127 + 3 = 130(10) = 1000 0010(2) m = 001101100...00 (23 bit)
Vậy: X = 0100 0001 0001 1011 0000 0000 0000 0000
85
Các quy ước đặc biệt
Nếu tất cả c|c bit của e đều bằng 0, c|c bit của m đều
bằng 0, thì X = 0
Nếu tất cả c|c bit của e đều bằng 1, c|c bit của m đều
bằng 0, thì X =
Nếu tất cả c|c bit của e đều bằng 1, m có ít nhất một bit bằng 1, thì X không phải l{ số (not a number - NaN)
86
Trục số biểu diễn
b = 2+127 ≈ 10+38 b = 2+1023 ≈ 10+308
Dạng 32 bit: a = 2-127 ≈ 10-38 Dạng 64 bit: a = 2-1023 ≈ 10-308 Dạng 80 bit: a = 2-16383 ≈ 10-4932 b = 2+16383 ≈ 10+4932
87
Thực hiện các phép toán
X1 = M1 * RE1 X2 = M2 * RE2 Ta có
X1 X2 = (M1 * RE1-E2 M2) * RE2 , với E2 E1 X1 * X2 = (M1 * M2) * RE1+E2 X1 / X2 = (M1 / M2) * RE1-E2
88
Các khả năng tràn số
Tr{n trên số mũ (Exponent Overflow): mũ dương
vượt ra khỏi gi| trị cực đại của số mũ dương có thể. Tr{n dưới số mũ (Exponent Underflow): mũ }m vượt
ra khỏi gi| trị cực đại của số mũ }m có thể.
Tr{n trên phần định trị (Mantissa Overflow): cộng hai phần định trị có cùng dấu, kết quả bị nhớ ra ngo{i bit cao nhất.
Tr{n dưới phần định trị (Mantissa Underflow): Khi hiệu chỉnh phần định trị, c|c số bị mất ở bên phải phần định trị.
89
Phép cộng và phép trừ
Kiểm tra c|c số hạng có bằng 0 hay không Nếu có thì g|n kết quả dựa trên số còn lại.
Hiệu chỉnh phần định trị
Sao cho 2 số có phần mũ giống nhau: tăng số mũ nhỏ v{ dịch phải phần
định trị tương ứng (dịch phải để hạn chế sai số nếu có).
VD: 1.01 * 23 + 1.11 = 1.01 * 23 + 0.00111 * 23
Cộng hoặc trừ phần định trị
Nếu tr{n thì dịch phải v{ tăng số mũ, nếu bị tr{n số mũ thì b|o lỗi tr{n
số.
Chuẩn hóa kết quả
Dịch tr|i phần định trị để bit tr|i nhất (bit MSB) kh|c 0. Tương ứng với việc giảm số mũ nên có thể dẫn đến hiện tượng tr{n
dưới số mũ.
90
Nội dung chương 2
2.1. C|c hệ đếm cơ bản 2.2. M~ hóa v{ lưu trữ dữ liệu trong m|y tính 2.3. Biểu diễn số nguyên 2.4. C|c phép to|n số học với số nguyên 2.5. Biểu diễn số thực 2.6. Biểu diễn kí tự
91
Biểu diễn kí tự trong máy tính
1. Bộ m~ ASCII (American Standard Code for
Information Interchange)
2. Bộ m~ Unicode
92
1. Bộ mã ASCII
Do ANSI (American National Standard Institute) thiết
kế
L{ bộ m~ 8 bit m~ hóa được cho 28 = 256 kí tự, có
m~ từ 0016 FF16, bao gồm: 128 kí tự chuẩn có m~ từ 0016 7F16 128 kí tự mở rộng có m~ từ 8016 FF16
93
HEXA
0
1
2
3
4
5
6
7
0
1
2
3
4
5
6
7
7
23
' 39
7 55
G 71
W 87
g 103
w 119
8
9
25
) 41
9 57
I 73
Y 89
i 105
y 121
A
B
C
D
E
94
F
127
a. Các kí tự chuẩn
95 kí tự hiển thị được: có m~ từ 2016 ÷ 7E16 26 chữ c|i hoa Latin 'A' ÷ 'Z' có m~ từ 4116 ÷ 5A16 26 chữ c|i thường Latin 'a' ÷ 'z' có m~ từ 6116 ÷ 7A16 10 chữ số thập ph}n '0' ÷ '9' có m~ từ 3016 ÷ 3916 C|c dấu c}u: . , ? ! : ; … C|c dấu phép to|n: + - * / … Một số kí tự thông dụng: #, $, &, @, ... Dấu c|ch (m~ l{ 2016)
33 m~ điều khiển: m~ từ 0016 ÷ 1F16 và 7F16 dùng để
m~ hóa cho c|c chức năng điều khiển
95
Điều khiển định dạng
96
Điều khiển truyền số liệu
97
Điều khiển phân cách thông tin
98
Các kí tự điều khiển khác
99
b. Các kí tự mở rộng
Được định nghĩa bởi: Nh{ chế tạo m|y tính Người ph|t triển phần mềm
Ví dụ:
Bộ m~ ký tự mở rộng của IBM: được dùng trên m|y tính
IBM-PC.
Bộ m~ ký tự mở rộng của Apple: được dùng trên m|y tính
Macintosh.
C|c nh{ ph|t triển phần mềm tiếng Việt cũng đ~ thay đổi
phần n{y để m~ ho| cho c|c ký tự riêng của chữ Việt, ví dụ như bộ m~ TCVN 5712.
100
2. Bộ mã Unicode
Do c|c h~ng m|y tính h{ng đầu thiết kế L{ bộ m~ 16-bit Được thiết ké cho đa ngôn ngữ, trong đó có tiếng Việt
101
Bài tập 1
Giả sử có c|c biến nhớ dưới đ}y chứa c|c số nguyên có dấu 8-bit với nội dung biểu diễn theo hệ 16 như sau:
P = 3A Q = 7C R = DE S = FF H~y x|c định gi| trị của c|c biến nhớ đó dưới dạng số
thập ph}n.
102
Bài tập 2
Giả sử có X thuộc kiểu số nguyên có dấu 16-bit, nó được g|n gi| trị dưới dạng thập ph}n bằng -1234. H~y cho biết nội dung của c|c byte nhớ chứa biến đó dưới dạng Hexa, biết rằng bộ nhớ lưu trữ theo kiểu đầu nhỏ (little-endian).
103
Bài tập 3
Giả sử có biến P chứa số nguyên có dấu 16 bit. Nội dung của biến P được cho trong bộ nhớ như sau:
H~y x|c định gi| trị của biến P dưới dạng thập ph}n.
104
Bài tập 4
Giả sử có một biến số thực X được biểu diễn bằng số dấu chấm động theo chuẩn IEEE 754 dạng 32 bit, nó chiếm 4 byte trong bộ nhớ với nội dung được chỉ ra ở hình vẽ sau.
Biết rằng bộ nhớ tổ chức theo kiểu đầu nhỏ (little-endian), hãy
x|c định gi| trị thập ph}n của số thực đó.
105
Bài tập 5
Giả sử có biến X thuộc kiểu số dấu chấm động theo
chuẩn IEEE 754 dạng 32 bit. Nó được g|n gi| trị dưới dạng thập ph}n bằng -124.125 v{ lưu trữ v{o bộ nhớ bắt đầu từ byte nhớ có địa chỉ l{ 200. H~y cho biết nội dung của c|c byte nhớ chứa biến đó dưới dạng Hexa, biết rằng bộ nhớ lưu trữ theo kiểu đầu nhỏ (little- endian).
106