Bài giảng 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
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
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
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng 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", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.
File đính kèm:
- bai_giang_cau_truc_may_tinh_chuong_2_bieu_dien_du_lieu_so_ho.pdf
Nội dung text: Bài giảng 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
- 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ụ . 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 ? 14988 : 16 = 936 dư 12 tức l{ C 936 : 16 = 58 dư 8 58 : 16 = 3 dư 10 tức l{ A 3 : 16 = 0 dư 3 Như vậy, ta có: 14988(10) = 3A8C(16) . Hexa Thập ph}n: 3A8C ? 3 2 1 0 3A8C (16) = 3 x 16 + 10 x 16 + 8 x 16 +12 x 16 = 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 8A9B B46E B7E5 FA9D + - + - 37CD 1AC9 2AF9 2BC5 C268 99A5 E2DE CED8 B800 8E9A 1234 4B6D + - + - 0FFF 3FE2 ABCD 3FEA CFFF A78D 879D 98BA + - + - 1FFF 45FB 5DF8 8A9D 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 10 20 30 1GB = 2 MB = 2 KB = 2 Byte 32 4GB = 2 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: n 1 n 2 1 0 A an 1 2 an 2 2 a1 2 a0 2 n 1 i A ai 2 i 0 . 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 Giải: A = 45 = 32 + 8 + 4 + 1 = 25 + 23 + 22 + 20 A = 0010 1101 B = 156 = 128 + 16 + 8 + 4 = 27 + 24 + 23 + 22 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 . Dải biểu diễn l{ [0, 255] . Trục số học máy tính: 0000 0000 = 0 255 0 1 0000 0001 = 1 254 2 0000 0010 = 2 3 0000 0011 = 3 1111 1111 = 255 . Trục số học: 0 1 2 255 29
- Với n = 8 bit . Kiểu dữ liệu tương ứng trong Turbo C l{ kiểu unsigned char. . Ví dụ: unsigned char a; 1111 1111 a = 255; + 0000 0001 a = a + 1; 1 0000 0000 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: 32 Dải biểu diễn l{ [0, 2 -1] . n = 64 bit: 64 Dải biểu diễn l{ [0, 2 -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 Ví dụ: cho A =0110 0101 Số bù một của A =1001 1010 + 1 Số bù hai của A =1001 1011 Nhận xét A = 0110 0101 Số bù hai của A += 1001 1011 1 0000 0000 = 0 (bỏ qua bit nhớ ra ngo{i) ->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: n 2 i A ai 2 i 0 n-1 Dải biểu diễn của số dương: [0, 2 -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: n 2 n 1 i A 2 ai 2 i 0 n-1 Dải biểu diễn của số }m: [-2 , -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: n 2 n 1 i A an 12 ai 2 i 0 . Dải biểu diễn: [-2n-1, 2n-1-1] 38
- Các ví dụ . Ví dụ 1. Biểu diễn c|c số nguyên có dấu sau đ}y bằng 8 bit A = +50 B = -70 Giải: A = +50 = 32 + 16 + 2 = 25 + 24 + 21 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 sau đ}y: A = 0101 0110 B = 1101 0010 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 . Dải biểu diễn l{ [-128, +127] . Trục số học máy tính: 0000 0000 = 0 0000 0001 = +1 -1 0 +1 0000 0010 = +2 -2 +2 0111 1111 = +127 1000 0000 = -128 1000 0001 = -127 1111 1110 = -2 -128 +127 1111 1111 = -1 . Trục số học: -128 -2 -1 0 1 2 127 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ụ: char a; a = 127; 0111 1111 a = a + 1; + 0000 0001 printf(“%d”,a); //Kết quả sai l{ -128 1000 0000 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: 31 31 Dải biểu diễn l{ [-2 , 2 -1] Kiểu dữ liệu tương ứng trong Turbo C l{ kiểu long int . n = 64 bit: 63 63 Dải biểu diễn l{ [-2 , 2 -1] 43
- Chuyển từ 8 bit sang 16 bit . Với số dương: +35 = 0010 0011 (8 bit) +35 = 0000 0000 0010 0011 (16 bit) 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 (16 bit) 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 5 0101 1 0001 6 0110 2 0010 7 0111 3 0011 8 1000 4 0100 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 . 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 kết quả sai + 0110 0110 hiệu chỉnh 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: 0101 0010 . 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: 0101 0010 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 = 1100 0101 = 197 x = 197; Y = 0100 0110 = 70 y = 70; S = 0000 1011 267 s = x + y; C = 1 carry-out out printf(“%d”,s); (KQ sai = 23 + 21 + 20 = 11) 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 n-bit Y n-bit X Bù 2 Bộ cộng n bit n-bit S 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 Số bị nhân M Mn-1 M1 M0 Điều khiển cộng Bộ cộng n bit Bộ điều khiển dịch và cộng Điều khiển dịch phải C An-1 A1 A0 Qn-1 Q1 Q0 Số nhân Q 61
- Lưu đồ thực hiện Bắt đầu C, A ¬ 0 M ¬ Số bị nhân Q ¬ Số nhân Bộ đếm ¬ n S Đ Q0 = 1 ? C, A ¬ A M Dịch phải C, A, Q Bộ đếm ¬ Bộ đếm - 1 S Đ Bộ đếm = 0 ? Kết thúc 62
- Ví dụ nhân số nguyên không dấu . M = 1011 (11 - Số bị nhân) . Q = 1101 (13 - Số nhân) . = 1000 1111 (143 - Tích) C A Q . 0 0000 1101 Các giá trị khởi đầu + 1011 . 0 1011 1101 A ¬ A + M 0 0101 1110 Dịch phải . 0 0010 1111 Dịch phải + 1011 . 0 1101 1111 A ¬ A + M 0 0110 1111 Dịch phải + 1011 . 1 0001 1111 A ¬ A + M 0 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 i j) . 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ó: n-1 n-2 k+1 k-1 0 11 10ak-1ak-2 a0 = -2 + 2 + + 2 + ak-12 + + a02 n-1 n-1 k+1 k-1 0 = -2 + 2 - 2 + ak-12 + + a02 . -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 Bắt đầu A Q Q-1 A ¬ 0 Q-1 ¬ 0 M ¬ Số bị nhân Q ¬ Số nhân Bộ đếm ¬ n = 10 = 01 Q0Q-1 A ¬ A M = 00 / 11 A ¬ A M Dịch phải A, Q, Q-1 (Giữ nguyên bit dấu của A) Bộ đếm ¬ Bộ đếm - 1 S Đ Bộ đếm = 0 ? Kết thúc 66
- Ví dụ về thuật toán Booth Ví dụ 1: Ví dụ 2: n = 4 bit, M = +7, Q = +3 n = 4 bit, M = +7, Q = -3 M = 0111, Q = 0011, -M = 1001 M = 0111, Q = 1101, -M = 1001 A Q Q-1 A Q Q-1 0000 0011 0 ; khởi tạo 0000 1101 0 ; khởi tạo +1001 +1001 1001 0011 0 ; A ¬ A - M 1001 1101 0 ; A ¬ A - M 1100 1001 1 ; dịch phải 1100 1110 1 ; dịch phải 1110 0100 1 ; dịch phải +0111 +0111 10011 1110 1 ; A ¬ A + M 10101 0100 1 ; A ¬ A + M 0001 1111 0 ; dịch phải 0010 1010 0 ; dịch phải +1001 0001 0101 0 ; dịch phải 1010 1111 0 ; A ¬ A - M 1101 0111 1 ; dịch phải 1110 1011 1 ; dịch phải 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 Số chia M Mn-1 M1 M0 Điều khiển cộng/trừ Bộ logic điều khiển Bộ cộng/trừ n bit cộng, trừ và dịch Điều khiển dịch trái An-1 A1 A0 Qn-1 Q1 Q0 Số bị chia Q 70
- Lưu đồ thực hiện Bắt đầu A ¬ 0 M ¬ Số chia Q ¬ Số bị chia Bộ đếm ¬ 0 Dịch trái A, Q A ¬ A M S Đ A < 0 ? Q ¬ 0 Q ¬ 1 0 0 A ¬ A M Bộ đếm ¬ Bộ đếm - 1 S Đ Bộ đếm = 0 ? Kết thúc 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 -2 VD: gi| trị của 101011.11 = 10101111 x 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ụ: 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 ̣p các só chấm tĩnh thuo ̣c A(5,2) nàm trong 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, đạ c bie ̣t là với phép tính nhân. . 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: 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: 31 30 23 22 0 S e m 63 62 52 51 0 S e m 79 78 64 63 0 S e m 81
- 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 1 130-127 Vậy X = (-1) x 1.10101100 00 x 2 = -1.101011 x 23 = -1101.011 = -13.375 83