Vì sao lại có các hệ đếm

Hệ nhị phân – được xem như một chuỗi chỉ có những số 0 và 1 và thường được gắn liền với những chiếc máy tính. Nhưng tại sao lại như vậy? Tại sao máy tính không dùng hệ thập phân thay vì chuyển tất cả sang hệ nhị phân? Sẽ không hiệu quả hơn khi dùng các hệ đếm cao hơn sao? Vì nếu dùng hệ nhị phân thì có vẻ như nó sẽ chiếm nhiều không gian lưu trữ hơn (nhiều khoảng trống hơn)

Tôi đã từng được hỏi câu này bởi cả những người chuyên và không chuyên trong ngành công nghệ thông tin, nhiều hơn cả là những người bán chuyên hoặc không nằm trong nghề. Nhưng dù câu hỏi đến từ ai thì câu trả lời đều hết sức đơn giản. 

Thế nào là kỹ thuật số (digital)?

Trước tiên ta cần hiểu thế nào thuật ngữ là kỹ thuật số (digital). Một máy tính kỹ thuật số hiện đại, trái ngược với một máy analog thời cũ, là hoạt động dựa trên nguyên lý bao gồm hai trạng thái “bật” hoặc “tắt“. Điều này tương ứng một cách trực tiếp đến trạng thái hiện diện hay vắng mặt của dòng điện. Trạng thái “bật” được gán cho số 1 trong khi trạng thái “tắt” là cho số 0.

Thuật ngữ “nhị phân” (binary) ám chỉ “hai”. Do đó một hệ nhị phân là hệ đếm dựa hoàn toàn chỉ trên hai con số là 0 và 1 mà không hề có sự hiện diện của bất kỳ con số nào khác. Đây là cơ sở để chuỗi nhị phân được hình thành. Mỗi số nhị phân đơn lẻ chỉ bao gồm hoặc là 0 hoặc là 1, khi ấy ta gọi nó là “bit“. Mỗi bit này tương ứng với một công tắc duy nhất trong một mạch điện. Kết hợp càng nhiều công tắc lại với nhau ta càng có thể làm ra nhiều số hơn. Vì vậy, thay vì chỉ một bit, ta gộp chúng lại thành một nhóm gồm 8 bit để tạo thành một “byte“. Byte ở đây là đơn vị cơ bản của bộ nhớ (storage), nhiều bytes ta sẽ có kilobytes, megabytes,… vốn là những thuật ngữ bạn thường hay nghe mỗi khi nhắc đến dung lượng của máy tính hay điện thoại. Kilobytes thì lớn hơn byte 1024 lần trong khi Megabytes thì lớn hơn Kylobytes 1024 lần.

Nhị phân dùng nhiều bộ nhớ hơn là hệ thập phân?

Nhìn thoáng qua có vẻ như hệ nhị phân tiêu tốn nhiều không gian hơn để biểu thị cùng một con số nếu đem so với hệ thập phân. Ví dụ như số 150 trong hệ thập phân chỉ gồm 3 số thì trong hệ nhị phân bạn phải dùng 8 chữ số là 10010110. Lập luận này sẽ trở nên vô dụng khi chúng ta cần hiển thị con số này lên màn hình máy tính, vì tất cả chúng đều được lưu trong một hệ nhị phân. Lý do duy nhất ta thấy rằng 150 “nhỏ hơn” so với 10010110 là khi ta viết nó trên một tờ giấy hay nhìn thấy nó hiển thị trên màn hình.

Càng gia tăng hệ cơ số thì ta càng cần ít chữ số để biểu thị cho một số nào đó, và ngược lại. Nhưng chính điều này lại đi ngược lại với nguyên tắc hoạt động của máy tính, đó chính là một mạch điện tập hợp những bit chỉ biêu thị một trong hai trạng thái là “bật” hoặc “tắt”. Bạn khó lòng có thể kiếm ra một trạng thái nào khác nằm giữa “bật” và “tắt” để có thể dùng một hệ đếm cao hơn (trừ trường hợp ta xét đến máy tính lượng tử sẽ được đề cập sau).

Hệ bát phân (octal) và thập lục phân (hex) thì sao?

Hệ bát phân và thập lục phân chẳng qua là một “lối tắt” để biểu diễn hệ nhị phân mà thôi. Cả hai hệ này đều biểu diễn thông qua một số nguyên lần lũy thừa của 2 (octal là lũy thừa 3 trong khi hex là lũy thừa 4). 3 chữ số trong hệ bát phân = 2 chữ số trong hệ thập lục phân = 8 chữ số trong hệ nhị phân = 1 byte. Điều này tạo thuận lợi hơn cho dân lập trình khi biểu thị mọi thứ trong môi trường 32-bit, thường dùng là những giá trị màu 32-bit, ví dụ như FF00EE99 (thay vì dùng 11111111000000001110111010011001). 

Những máy tính không dùng hệ nhị phân

Hãy thử tưởng tượng một chiếc máy tính nào đó dựa trên hệ thập phân. Khi ấy sẽ có 10 trạng thái khả dĩ của dòng điện. Và mọi thứ sẽ được biểu diễn bởi những chữ số từ 0 đến 9. Điều này khó có thể xảy ra với cấu tạo của những máy tính ngày nay nhưng hoàn toàn có thể đối với những máy tính lượng tử sẽ được đề cập sau.

Vậy hệ thống này có hiệu quả hơn hay không? Giả sử những công tắc của hệ máy tính nhị phân chiếm cùng 1 khoảng trống vật lý với những công tắc hệ đếm cơ số 10. Khi ấy những máy tính chạy hệ 10 này sẽ hoạt động với năng suất cao hơn là điều hiển nhiên. Vì thế mặc dù câu hỏi liệu rằng hệ nhị phân sẽ “không hiệu quả” là có vẻ đúng trong lý thuyết nhưng về mặt thực tế sử dụng ngày nay thì không.

Tại sao tất cả các máy tính hiện đại ngày nay đều sử dụng hệ nhị phân?

Nói quá trời dài dòng từ đầu bài đến giờ, vậy đâu là câu trả lời? Câu trả lời ngắn gọn là do máy tính ngày nay chưa được thiết kế để có thể nhận ra nhiều hơn 2 tín hiệu (trong khi máy tính lượng tử thì chưa được bán). Hệ nhị phân được chọn bởi vì nó khá dễ dàng khi phân biệt sự hiện diện hay vắng mặt của 1 tín hiệu điện tại 1 thời điểm nào đó. Điều này càng trở nên đáng giá khi máy tính phải xử lý hàng tỷ tỷ các tín hiệu này mỗi giây. Nếu dùng những hệ đếm cơ số khác trên những hệ thống máy này thì sẽ thật điên rồ, vì khi khi ấy máy tính phải tốn công chuyển qua chuyển lại giữa các hệ cơ số. Đó là lý do vì sao trên máy-được-thiết-kế-cho-nhị-phân thì chỉ nên dùng cho nhị phân mà thôi.

Bài viết được Math2IT trích dịch từ bài viết của Iyosha Blinnikov.

Để thực hiện việc tính toán và xử lý thông tin, con người đã tạo ra các hệ đếm (hệ cơ số) khác nhau. Cùng tìm hiểu các hệ đếm cơ bản thường sử dụng trong máy tính.

Hệ đếm là một tập các ký hiệu (chữ số, chữ cái) để biểu diễn các số và xác định giá trị của các biểu diễn số. Mỗi hệ đếm gồm một tập hợp các ký số hữu hạn. Số lượng các ký số của mỗi hệ đếm gọi là cơ số.

Các hệ đếm cơ bản trong máy tính là:

  • Hệ nhị phân (binary) – hệ 2
  • Bát phân (octal) – hệ 8
  • Hệ thập phân (decimal) – hệ 10
  • Thập lục phân (hexadecimal) – hệ 16

Vì sao lại có các hệ đếm

  • Hệ cơ số 2
  • Biểu diễn bởi 2 chữ số 0 và 1
  • Số nhị phân có dạng: A(2)=anan-1an-2…a0.a­-1a-2…a-m
  • Giá trị A ở hệ cơ số 10 được tính như sau:

A(10)=an2n+an-12n-1+an-22n-2+…+a020+a-12-1+a-22-2+…+a-m2-m

  • Ví dụ: 101(2) = 1.22 + 0.21 + 1.20 = 5(10)

Vì sao lại có các hệ đếm

  • Hệ cơ số 8
  • Biểu diễn bởi 8 chữ số 0, 1, 2, 3, 4, 5, 6, 7
  • Số bát phân có dạng: A(8)=anan-1an-2…a0.a­-1a-2…a-m
  • Giá trị A ở hệ cơ số 10 được tính như sau:

A(10)=an8n+an-18n-1+an-28n-2+…+a080+a-18-1+a-28-2+…+a-m8-m

  • Ví dụ: 43(8) = 4.81 + 3.80 = 35(10)

  • Hệ cơ số 10
  • Biểu diễn bởi 10 chữ số 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
  • Số thập phân có dạng: A(10)=anan-1an-2…a0.a­-1a-2…a-m
  • Giá trị A ở hệ cơ số 10 được tính như sau:

A(10)=an10n+an-110n-1+an-210n-2+…+a0100+a-110-1+a-210-2+…+a-m10-m

  • Ví dụ: 536(10) = 5.102 + 3.101 + 6.100 = 536(10)

  • Hệ cơ số 16
  • Biểu diễn bởi 16 chữ số và chữ cái 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. Trong đó, A(tương đương) 10, B11, C12, D13, E14, F15.
  • Số thập lục phân có dạng: A(16)=anan-1an-2…a0.a­-1a-2…a-m
  • Giá trị A ở hệ cơ số 10 được tính như sau:

A(10)=an16n+an-116n-1+an-216n-2+…+a0160+a-116-1+a-216-2+…+a-m16-m

  • Ví dụ: 19(16) = 1.161 + 9.160 = 25(10), 1AB(16) = 1.162 + 10.161 + 11.160 = 427(10)

Nhị phânBát phânThập phânThập lục phân
0000000
0001111
0010222
0011333
0100444
0101555
0110666
0111777
10001088
10011199
10101210A
10111311B
11001412C
11011513D
11101614E
11111715F

Đọc thêm: Chuyển đổi giữa các hệ đếm cơ bản

Bài trước và bài sau trong môn học