270 likes | 494 Views
IT1110 Tin học đại cương. Phần I: Tin học căn bản Chương 2: Biểu diễn dữ liệu trong máy tính Nguyễn Bá Ngọc. Nội dung chương này. 2.1. Các hệ đếm 2.2. Biểu diễn dữ liệu và đơn vị đo 2.3. Biểu diễn số nguyên 2.4. Phép toán số học với số nguyên 2.5. Tính toán logic với số nhị phân
E N D
IT1110 Tin học đại cương Phần I: Tin học căn bản Chương 2: Biểu diễn dữ liệu trong máy tính Nguyễn Bá Ngọc
Nội dung chương này 2.1. Các hệ đếm 2.2. Biểu diễn dữ liệu và đơn vị đo 2.3. Biểu diễn số nguyên 2.4. Phép toán số học với số nguyên 2.5. Tính toán logic với số nhị phân 2.6. Biểu diễn ký tự 2.7. Biểu diễn số thực 2
2.6. Biểu diễn ký tự • Nguyên tắc chung: • Các ký tự cũng cần được biểu diễn bằng chuỗi bit nhị phân gọi là mã ký tự. • Số bit dùng để biểu diễn mỗi ký tự phụ thuộc vào bộ mã (ánh xạ 1-1 giữa ký tự và mã ký tự) được sử dụng. Vd : Bộ mã ASCII dùng 8 bit cho 1 ký tự. Bộ mã Unicode dùng 16 bit.
Bộ mã ASCII (American Standard Code for Information Interchange) • Bộ mã đầu tiên được sử dụng trong máy tính • Do ANSI (American National Standard Institute) thiết kế • ASCII là bộ mã được dùng để trao đổi thông tin chuẩn của Mỹ. Lúc đầu chỉ dùng 7 bit (128 ký tự) sau đó mở rộng thành 8 bit và có thể biểu diễn 256 ký tự khác nhau trong máy tính • Bộ mã ASCII mở rộng 8 bit bao gồm: • 128 kí tự chuẩn có mã từ 0016 7F16 • 128 kí tự mở rộng có mã từ 8016 FF16
Bộ mã ASCII (1) • 95 kí tự hiển thị được:có mã từ 2016 ÷ 7E16 • 10 chữ số thập phân '0' ÷ '9' có mã từ 3016 ÷ 3916 • 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
Bộ mã ASCII (2) • 95 ký tự hiển thị được: • Các dấu câu: . , ? ! : ; v.v. • Các dấu phép toán: + - * / v.v. • Một số kí tự thông dụng: #, $, &, @, v.v. • 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
Các ký tự mở rộng của bảng mã ASCII • Đượ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, TCVN 3 (ABC), v. v.
Bộ mã Unicode • Có hai dự án độc lập nhằm mục đích tạo ra bộ mã chung cho tất cả các ngôn ngữ • ISO 10646 • Unicode Project • Hai chuẩn này thống nhất về mã ký tự • Bảng mã Unicode dùng 16-bit để biểu diễn một ký tự • Được chấp nhận ở Việt Nam • TCVN 6909:2001
Nội dung chương này 2.1. Các hệ đếm 2.2. Biểu diễn dữ liệu và đơn vị đo 2.3. Biểu diễn số nguyên 2.4. Phép toán số học với số nguyên 2.5. Tính toán logic với số nhị phân 2.6. Biểu diễn ký tự 2.7. Biểu diễn số thực 12
2.7. Biểu diễn số thực • 2.7.1. Nguyên tắc chung • Để biểu diễn số thực, trong máy tính thường dùng ký pháp dấu phẩy động (Floating Point Number). • Tổng quát: một số thực X được biểu diễn theo kiểu số dấu phẩy động như sau: • X = M * RE • M là phần định trị (Mantissa) • R là cơ số (Radix) • E là phần mũ (Exponent)
32 bit (dạng chính xác đơn – single precision) kiểu float trong C exponent bias = 127 64 bit (dạng chính xác kép – double precision) kiểu double trong C exponent bias = 1023 31 30 23 22 0 S e m 63 62 52 51 0 S e m Các dạng biểu diễn cơ bản
Dạng chính xác đơn (Single precision 32 bit) • S là bit dấu • S = 0: số dương; S = 1: số âm • Phần mũ E: • E = e – 127, trong đó e (excess) có độ dài 8 bit • Giá trị 127 gọi là độ lệch (bias) • Phần định trị M=1.m, trong đó m là phần lẻ của phần định trị gồm 23 bit: • Công thức xác định giá trị của số thực: X = (-1)S * M * 2e-127
Giá trị của số thực độ chính xác đơn (32 bit) • Nếu các bit của e = 0 và các bit của m = 0 • S = 0 → X = +0 • S = 1 → X = –0 • Các bit của e = 1, các bit của m = 0 • S = 0 → X = + • S = 1 → X = – • Các bit của e = 1, còn m có ít nhất 1 bit = 1 thì nó không biểu diễn cho số nào cả (NaN – Not A Number, lỗi khi chia cho 0)
Giá trị của số thực độ chính xác đơn (32 bit) Denormalized numbers Tất cả các bit của e = 0 X = (-1)S x 0.m x 2-126 Normalized numbers min(E) = –126 với e = 1 max(E) = 127 với e = 254 (khi e = 255, X không phải là số hữu hạn) X = (-1)S x 1.m x 2e – 127 18
Dạng 32 – bit. Ví dụ: • Xác định giá trị của số thực được biểu diễn bằng 32 bit như sau: 1100 0001 0101 0110 0000 0000 0000 0000 • S = 1 số âm • e = 1000 00102 = 130 E = 130 – 127 = 3 • Vậy, X= -1.10101100*23 = -1101.011 = -13.375
Dạng 32 – bit. Ví dụ (tiếp): • 0011 1111 1000 0000 0000 0000 0000 0000 • Kết quả = +1.0
Dải biểu diễn giá trị • Độ chính xác đơn (32 bit) • Giá trị gần 0 nhất (biểu diễn bởi denomalized numbers) là ± 2-149 ≈ ±1,4012985 x 10-45 • Giá trị gần 0 nhất (biểu diễn bởi normalized numbers) là ± 2-126 ≈ ±1,175494351 x 10-38 • Giá trị hữu hạn xa 0 nhất (với e = 254 và các bit trong m bằng 1) là ± (1 – 2-24) x 2128 ≈ ±3.4028235 x 1038 • Số chữ số có nghĩa ≈ 7
Dải biểu diễn giá trị Độ chính xác kép (double precision 64 bit) Giá trị gần 0 nhất (biểu diễn bởi denomalized numbers) là ± 2-1074 ≈ ±5 x 10-324 Giá trị gần 0 nhất (biểu diễn bởi normalized numbers) là ± 2-1022 ≈ ±2,2250738585072020 x 10-308 Giá trị hữu hạn xa 0 nhất (với e = 2046 và các bit trong m bằng 1) là ± (1 – 2-53) x 21024 ≈ ±1.7976931348623157 x 1038 Số chữ số có nghĩa ≈ 15 22
Định dạng mở rộng • Chuẩn IEEE754-1985 chỉ xác định độ chính xác và lũy thừa tối thiểu cho mỗi định dạng mở rộng • X87 80-bit extended format là chuẩn được biết đến nhiều nhất thỏa mãn yêu cầu này
Thực hiện phép toán số dấu phẩy động • X1 = M1 * RE1 • X2 = M2 * RE2 • Ta có: • X1 * X2 = (M1 * M2) * RE1+ E2 • X1 / X2 = (M1 / M2) * RE1 - E2 • X1 X2 = (M1* RE1-E2 M2) * RE2, với E1 E2
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ể (0) • 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ị.
Phép cộng và phép trừ • Kiểm tra các số hạng có bằng 0 hay không • Hiệu chỉnh phần định trị • Cộng hoặc trừ phần định trị • Chuẩn hóa kết quả