Mã hóa số và ký tự trong mạch số: BCD, ASCII, Gray và các hệ thống khác

Trong thế giới kỹ thuật số, mọi thông tin, từ số liệu đến văn bản, đều được biểu diễn dưới dạng số nhị phân. Để các mạch số có thể hiểu và xử lý thông tin này, cần có các quy tắc và phương pháp mã hóa khác nhau. Bài viết này sẽ khám phá các loại mã phổ biến như BCD, ASCII, Excess-3, Gray và cách chuyển đổi giữa các hệ thống số, cũng như các phép toán số học trong hệ nhị phân.

Mã BCD (Binary Coded Decimal)

Mã BCD, hay mã số thập phân được mã hóa theo nhị phân, là một phương pháp biểu diễn các số thập phân từ 0 đến 9 bằng các số nhị phân 4 bit. Mỗi chữ số thập phân được thay thế bằng biểu diễn nhị phân tương ứng của nó.

Thập phân BCD (4 bit)
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001

Lưu ý rằng các mã nhị phân từ 1010 đến 1111 không được sử dụng trong mã BCD vì chúng không tương ứng với bất kỳ chữ số thập phân nào.

Chuyển đổi giữa thập phân và BCD

Để chuyển đổi một số thập phân sang BCD, ta thay thế mỗi chữ số thập phân bằng mã BCD 4 bit tương ứng của nó. Ví dụ:

  • 48910 = 0100 1000 1001 (BCD)
  • 53710 = 0101 0011 0111 (BCD)

Ngược lại, để chuyển đổi từ BCD sang thập phân, ta chia chuỗi BCD thành các nhóm 4 bit và thay thế mỗi nhóm bằng chữ số thập phân tương ứng. Ví dụ:

  • 0011 0100 1001 01012 (BCD) = 349510

So sánh BCD và nhị phân

BCD không phải là một hệ thống số hoàn chỉnh như nhị phân, thập phân hay thập lục phân. Thay vào đó, nó là một cách biểu diễn số thập phân, trong đó mỗi chữ số được mã hóa bằng giá trị nhị phân tương đương. Mã BCD cần nhiều bit hơn để biểu diễn các số thập phân nhiều chữ số so với biểu diễn nhị phân thông thường, vì nó không sử dụng tất cả các tổ hợp 4 bit có thể có.

Ưu điểm của BCD là dễ dàng chuyển đổi qua lại giữa thập phân và nhị phân.

Cộng BCD

Khi cộng hai số BCD, nếu tổng của hai chữ số nhỏ hơn hoặc bằng 9, ta thực hiện phép cộng nhị phân bình thường. Ví dụ: 6 + 2 = 8, được biểu diễn trong BCD là:

0110 (6)
+ 0010 (2)
= 1000 (8)

Nếu tổng lớn hơn 9, ta cần điều chỉnh bằng cách cộng thêm 6 (0110) vào kết quả. Điều này là do các mã từ 1010 đến 1111 không hợp lệ trong BCD. Ví dụ: 5 + 8 = 13, được biểu diễn trong BCD như sau:

0101 (5)
+ 1000 (8)
= 1101 (13 - không hợp lệ)
+ 0110 (6)
= 0001 0011 (13 - đã điều chỉnh)

Mã ASCII (American Standard Code for Information Interchange)

Mã ASCII là một tiêu chuẩn mã hóa ký tự được sử dụng rộng rãi để biểu diễn văn bản trong máy tính và các thiết bị truyền thông. Nó sử dụng 7 bit để biểu diễn 128 ký tự khác nhau, bao gồm các chữ cái (hoa và thường), chữ số, dấu câu và các ký tự điều khiển.

Ký tự Mã ASCII (7 bit) Bát phân Thập phân
A 100 0001 101 65
B 100 0010 102 66
C 100 0011 103 67
0 011 0000 060 48
1 011 0001 061 49
2 011 0010 062 50
. 010 1110 056 46
( 010 1000 050 40

Mã Thừa 3 (Excess-3 code)

Mã Thừa 3 là một loại mã BCD, trong đó mỗi chữ số thập phân được biểu diễn bằng mã nhị phân của nó cộng thêm 3. Ví dụ, số thập phân 2 được mã hóa thành 2 + 3 = 5, có mã nhị phân là 0101. Số 5 được mã hóa thành 5 + 3 = 8, có mã nhị phân là 1000.

Mã Gray

Mã Gray là một hệ thống mã hóa nhị phân, trong đó hai mã kế tiếp chỉ khác nhau ở một bit duy nhất. Điều này rất hữu ích trong các ứng dụng như bộ mã hóa vị trí, nơi sự thay đổi đột ngột trong nhiều bit có thể gây ra lỗi.

Thập phân Nhị phân Mã Gray
0 0000 0000
1 0001 0001
2 0010 0011
3 0011 0010
4 0100 0110
5 0101 0111
6 0110 0101
7 0111 0100
8 1000 1100
9 1001 1101
10 1010 1111
11 1011 1110
12 1100 1010
13 1101 1011
14 1110 1001
15 1111 1000

Phát hiện lỗi bằng bit chẵn lẻ

Để phát hiện lỗi trong quá trình truyền dữ liệu, người ta thường thêm một bit chẵn lẻ (parity bit) vào mã ASCII 7 bit, tạo thành một byte 8 bit.

  • Kiểm tra chẵn (Even parity): Bit chẵn lẻ được chọn sao cho tổng số bit 1 trong byte là số chẵn.
  • Kiểm tra lẻ (Odd parity): Bit chẵn lẻ được chọn sao cho tổng số bit 1 trong byte là số lẻ.

Ví dụ, với ký tự “A” (100 0001):

  • Kiểm tra chẵn: 0100 0001 (tổng số bit 1 là 2, số chẵn)
  • Kiểm tra lẻ: 1100 0001 (tổng số bit 1 là 3, số lẻ)

Nếu mạch nhận được một byte có số lượng bit 1 không phù hợp với quy ước chẵn lẻ, nó sẽ biết rằng dữ liệu đã bị lỗi.

Chuyển đổi giữa các hệ thống số

Từ nhị phân sang thập phân

Mỗi bit trong số nhị phân có một trọng số dựa trên vị trí của nó. Để chuyển đổi một số nhị phân sang thập phân, ta cộng các trọng số của các bit 1. Ví dụ:

101102 = (1 x 24) + (0 x 23) + (1 x 22) + (1 x 21) + (0 x 20) = 16 + 0 + 4 + 2 + 0 = 2210

Từ thập phân sang nhị phân

Có hai cách để chuyển đổi một số thập phân sang nhị phân:

  1. Tổng lũy thừa của 2: Biểu diễn số thập phân dưới dạng tổng các lũy thừa của 2, sau đó ghi các bit 0 và 1 vào vị trí tương ứng.
  2. Lặp lại phép chia cho 2: Chia số thập phân cho 2 và ghi lại số dư. Lặp lại quá trình này cho đến khi thương số bằng 0. Kết quả nhị phân được hình thành bằng cách viết các số dư theo thứ tự ngược lại (số dư đầu tiên là LSB, số dư cuối cùng là MSB).

Từ bát phân sang thập phân

Nhân mỗi chữ số bát phân với trọng số của nó (lũy thừa của 8) và cộng các kết quả lại. Ví dụ:

4758 = (4 x 82) + (7 x 81) + (5 x 80) = 256 + 56 + 5 = 31710

Từ thập phân sang bát phân

Sử dụng phương pháp lặp lại phép chia cho 8 và lấy số dư.

Từ bát phân sang nhị phân

Thay thế mỗi chữ số bát phân bằng số nhị phân 3 bit tương đương của nó. Ví dụ:

3468 = 011 100 1102

Từ nhị phân sang bát phân

Chia số nhị phân thành các nhóm 3 bit, bắt đầu từ LSB, và thay thế mỗi nhóm bằng chữ số bát phân tương đương. Thêm các bit 0 vào bên trái nếu cần thiết để hoàn thành nhóm 3 bit cuối cùng.

Từ thập lục phân sang thập phân

Nhân mỗi chữ số thập lục phân với trọng số của nó (lũy thừa của 16) và cộng các kết quả lại. Ví dụ:

45616 = (4 x 162) + (5 x 161) + (6 x 160) = 1024 + 80 + 6 = 111010

Từ thập phân sang thập lục phân

Sử dụng phương pháp lặp lại phép chia cho 16 và lấy số dư. Nếu số dư lớn hơn 9, hãy sử dụng các chữ cái A đến F để biểu diễn chúng.

Từ thập lục phân sang nhị phân

Thay thế mỗi chữ số thập lục phân bằng số nhị phân 4 bit tương đương của nó.

Từ nhị phân sang thập lục phân

Chia số nhị phân thành các nhóm 4 bit, bắt đầu từ LSB, và thay thế mỗi nhóm bằng chữ số thập lục phân tương đương. Thêm các bit 0 vào bên trái nếu cần thiết để hoàn thành nhóm 4 bit cuối cùng.

Tính toán với hệ thống số

Cộng số thập lục phân

Cộng hai chữ số thập lục phân trong hệ thập phân. Nếu tổng nhỏ hơn hoặc bằng 15, hãy biểu diễn nó bằng chữ số thập lục phân tương đương. Nếu tổng lớn hơn hoặc bằng 16, trừ 16 và nhớ 1 sang vị trí tiếp theo.

Cộng nhị phân

Cộng hai bit nhị phân theo các quy tắc sau:

  • 0 + 0 = 0
  • 0 + 1 = 1
  • 1 + 0 = 1
  • 1 + 1 = 10 (0 nhớ 1)

Trừ nhị phân

Thực hiện phép trừ tương tự như trừ thập phân, mượn 1 từ hàng cao hơn nếu cần thiết.

Biểu diễn số có dấu

  • Bit dấu: Bit ngoài cùng bên trái (MSB) được sử dụng để biểu thị dấu của số (0 cho dương, 1 cho âm).
  • Bù 1: Đảo tất cả các bit (0 thành 1, 1 thành 0).
  • Bù 2: Lấy bù 1 và cộng thêm 1.

Nhân nhị phân

Thực hiện phép nhân tương tự như nhân thập phân, nhưng chỉ nhân với 0 hoặc 1.

Chia nhị phân

Thực hiện phép chia tương tự như chia thập phân.

Kết luận

Việc hiểu các hệ thống mã hóa số và ký tự khác nhau là rất quan trọng trong lĩnh vực điện tử và kỹ thuật máy tính. Các mã BCD, ASCII, Gray và các phương pháp chuyển đổi giữa các hệ thống số khác nhau là những công cụ thiết yếu để thiết kế và phát triển các hệ thống kỹ thuật số hiệu quả. Việc nắm vững các phép toán số học trong hệ nhị phân cũng rất quan trọng để hiểu cách máy tính thực hiện các phép tính toán cơ bản.