Chương 2 Đại cương về máy tính điện tử Chương 2 Đại cương về MTĐT (tiếp theo) 2 3 Cơ sở số học và logic 2 3 Cơ sở số học và logic 2 3 1 Hệ đếm trong MTĐT Các hệ đếm thường dùng trong MTĐT Hệ thập phân[.]
Chương Đại cương MTĐT (tiếp theo) 2.3 Cơ sở số học logic 2.3 Cơ sở số học logic • 2.3.1 Hệ đếm MTĐT • Các hệ đếm thường dùng MTĐT • Hệ thập phân (DECimal) gồm 10 chữ số 0, 1, … Đếm bình thường • Dạng khai triển số tự nhiên D có n chữ số Đa thức Pn(10), bậc n hệ số chữ số từ đến • Ví dụ: 32579 = 3*104 + 2*103 + 5*102 + 7*10 + • Các phép tính số học bình thường: + = • Hệ nhị phân (BINary) có chữ số • Đếm 0, 1, 10, 11, 100, 101, 110, 111, 1000,… • Để đổi số BIN sang hệ DEC ta khai triển số thành D có thành Đa thức Pn(2), bậc n với hệ số • Để ám số nhị phân ta viết thêm số • Ví dụ: 11012 = 1*23 + 1*22 + 0*21 + 1*20 = 13 • Phép nhân bình thường • Phép cộng lại có: 12 + 12 = 102 • Hệ bát phân (OCTal) có chữ số 0, 1, … Nhưng ta bỏ qua không sâu Trừ hai số nhị phân 1101011 10111 1010100 Trừ số nhỏ số lớn phải mượn sau phải trả Ví dụ trừ 1, phải mượn hàng cao thành 10 trừ 1, sau phải trả Trừ hai số nhị phân Hệ thập lục phân (HEXadecimal) gồm 16 chữ số 0, 1, …, 9, A, B, C, D, E F • Đếm: 0, 1, …,9, A, …, F, 10, 11, , FF, 100, 101, …, • Để ám hệ HEX ta viết thêm chữ $ # phía trước chữ số số 16 hay chữ h phía sau • $1F, #1F, 1F16, 1Fh, #1f, $1f • Để đổi số HEX hệ DEC ta khai triển thành Đa thức Pn(16), bậc n với hệ số F, tức từ 15 • Ví dụ: $1F = $1*$101 + $F*$100 = 1.16 + 15 = 31, $FF = $F*$101 + $F*100 = 15.16 +15 = 255 • Chú ý: $1 + $ = $A, $1 + $F = $10, Chuyển đổi số tự nhiên từ hệ đếm khác hệ DEC • Phương pháp dễ nhớ để đổi số hệ BIN, OCT hay HEX DEC dùng Lược đồ Horner để tính giá trị đa thức P(x) theo cách triển khai ông Horner P(x) = ax3 + bx2 + cx + d = ((ax + b)x + c)x +d, • Lược đồ mang tên ơng sau: Lược đồ Horner Ví dụ: Tính P(x) = ax3+bx2+cx+d Chuyển đổi số tự nhiên từ hệ DEC hệ đếm khác Biết số P hệ DEC sang hệ đếm số x, chẳng hạn có dạng ax3 + bx2 + cx + d Hãy tính hệ số a, b, c d Theo Horner, ta có: P = ((ax + b)x + c)x + d P chia cho x ((ax + b)x + c) dư d Đặt P = (ax + b)x + c P chia cho x (ax + b) dư c Đặt P ax + b P chia cho x a dư b Đặt P a P chia cho x dư a Hết việc! (Chú ý: a, b, c, d phải bé x) Ta thu d, c, b a theo trình tự thời gian Nhưng cần viết ngược lại để kết OK Đổi DEC sang BIN 13 chia cho dư chia cho dư chia cho dư 1 chia cho dư Kết 11012 (Viết từ lên!) Đổi DEC sang HEX BIN sang HEX ngược lại Đặc biệt chuyển đổi BIN HEX cịn làm sau: Coi chữ số hệ HEX dãy bít, việc chuyển đổi dễ dàng thực 0000 0100 1000 1100 = = = = 0, 4, 8, C, 0001 0101 1001 1101 = = = = 1, 5, 9, D, 0010 0110 1010 1110 = = = = 2, 6, A, E, 0011 0111 1011 1111 = = = = 3, 7, B, F Ví dụ chuyển đổi BIN sang HEX • 1F16 = 000111112 • ABC1216 = 101010111100000100102 • 10010010111101010112 = ? Giải: Dãy 10010010111101010112 chia thành nhóm bít, từ phải sang trái thêm số bên trái cho số bít chia hết cho 010010010111101010112 = 497AB16 2.3.2 Mã hóa thơng tin Số tự nhiên • Số tự nhiên nhỏ (cỡ bit, kiểu unsigned char) từ 00000000 đến 11111111 tức giá trị đến 255 • Số tự nhiên trung bình (cỡ 16 bit, unsigned int), • từ 0000000000000000 đến 1111111111111111 • tức từ đến 65535 • Số tự nhiên lớn (cỡ 32 bit, kiểu unsigned long) từ 32 bít đến 32 bít 1, tức từ đến 4294967295 Số nguyên • Số nguyên ngắn (cỡ bit, kiểu char), bit đầu bít dấu (0 +, -), bít sau số Giá trị từ 10000000 đến 01111111, -128 đến 127 • Số nguyên trung bình (cỡ 16 bit, kiểu int), bit đầu bít dấu (0 +, -), 15 bít sau số Giá trị từ 100 (15 bit 0) đến 011 (15 bit 1) tức từ -32768 đến 32767 • Số nguyên dài (32 bit, kiểu long int), bit đầu bít dấu (0 +, -), 31 bít sau số Giá trị từ -2147483648 đến 2147483647 Cảnh giác • Kết nhận sai người lập trình khơng ý đến cỡ/kiểu liệu • Ví dụ: Làm phép cộng a + b = c • Bước Xin cấp phát ô nhớ a, b, c kiểu số tự nhiên cỡ Byte • Bước Nhập a, b vào nhớ có • Bước Lấy ô nhớ a + b kết đưa vào ô nhớ c Bước In kết hình Kết sai đâu? Phân tích lỗi, qua ví dụ sau Nhập a = 255 b = Vào ô nhớ a = 11111111, b = 00000001 Máy cộng 11111111 • 00000001 thành 100000000, thừa bit Đưa vào nhớ c có bít thơi Xuất hình 255 + = Vậy, muốn kết phải xin cấp phát cho c kiểu liệu 16 bit Mã hóa số âm nào? • Có người tưởng muốn mã hóa số ngun âm cần đảo bít (0 thành thành 0) hay cịn gọi bù Kết sai • Ví dụ: Có người đổi sau: -13 = 11110010 Khi 00001101+11110010=11111111 Sai! Có người khác đổi -13 thành 10001101 Cũng sai! Ngoài đời = 0, máy 255 khác Cơng thức mã hóa số âm -Z = not(Z) + Bước Đảo bit, tức not(z) Bước Thêm 1, tức not(z) + Ví dụ: Mã hóa -13 thành dạng cỡ bit Bước 13 = 00001101 11110010 Bước -13 = 11110010 + = 11110011 Máy tính làm: 00001101 + 11110011 = 100000000 = (1 bị tràn) • Chú ý: Các cỡ khác làm tương tự • • • • • • ...2.3 Cơ sở số học logic • 2.3.1 Hệ đếm MTĐT • Các hệ đếm thường dùng MTĐT • Hệ thập phân (DECimal) gồm 10 chữ số 0, 1, … Đếm bình thường... Pn(10), bậc n hệ số chữ số từ đến • Ví dụ: 32579 = 3*104 + 2*103 + 5*102 + 7*10 + • Các phép tính số học bình thường: + = • Hệ nhị phân (BINary) có chữ số • Đếm 0, 1, 10, 11, 100, 101, 110, 111, 1000,…... 00001101+11110010=11111111 Sai! Có người khác đổi -13 thành 10001101 Cũng sai! Ngoài đời = 0, máy 255 khác Cơng thức mã hóa số âm -Z = not(Z) + Bước Đảo bit, tức not(z) Bước Thêm 1, tức not(z) + Ví dụ: Mã