Trang chủ » Hệ đếm cơ số có gì hot?
Chuyện bên lề

Hệ đếm cơ số có gì hot?

hệ đếm cơ số

Xin chào mọi người!

Như ta đã biết, máy tính làm việc với các số 0 và 1, tượng trưng cho các ký hiệu true hoặc false. Nhưng tại sao trong quá trình phát triển hàng thế kỉ qua, con người lại tạo thêm vô vàn các hệ số khác nhau? Nào là hệ số bát phân (Octal) hay hệ số thập lục phân (Hexadecimal), sao lại phải rắc rối thế nhỉ?

Bài viết này mình vô tình có ý tưởng ở trong 1 group lập trình nên xin phép cảm ơn chủ topic đã gợi ý nhé! :v

Có 10 loại người trên thế giới: người biết nhị phân và không. Tại sao lại là 10 nhỉ?
Có 10 loại người trên thế giới: người biết nhị phân và không. Tại sao lại là 10 nhỉ?

Từ ngày xưa, con người đã biết sử dụng hệ nhị phân trong việc bói toán, hay ở Trung Quốc là dùng để đếm quẻ tính sao các thứ. Sau đó, các cụ nhà ta đã sử dụng các “công tắc” để biểu diễn 2 trạng thái ON và OFF trong phần cứng máy tính. Tại sao vậy? Đơn giản là vì lúc đó phần cứng được cấu thành từ rất nhiều con transistor, mỗi 1 con như vậy có thể nhận hoặc giải phóng các electron nếu cần thiết (quy ước 1 là ở 5V, 0 là ở 0V).

Hmmm, tại sao lại là 1 và 0 nhỉ?

  • 1 là true, 0 là false (giống điều kiện)
  • 1 là ON, 0 là OFF (giống công tắc)
  • Suy nghĩ khác 1 tí, 1 là tồn tại, 0 là không tồn tại (giống như tín hiệu điện mình đã nói trên)
Biểu đồ truyền tín hiệu điện theo thời gian
Biểu đồ truyền tín hiệu điện theo thời gian

Các con chip điện bây giờ ta sử dụng đều là những linh kiện điện tử, tất nhiên nó sẽ hiểu được tín hiệu điện dễ dàng.

Vậy tại sao lại dùng nhị phân mà không dùng thập phân?

Nếu nó có thể hiểu được các mức hiệu điện thế như trên, tại sao ta không quy ước nhiều nhiều lên tí, chẳng hạn như mức 10V cho số 2, 15V cho số 3,… để có thể quy ra hệ thập phân mình dùng? Tiết kiệm biết bao nhiêu bộ não đang đau điếng trên giảng đường Đại học có phải không =))

Vâng, câu trả lời có thể rất dài dòng, nên mình xin phép được trả lời 1 cách đơn giản và ngắn gọn nhất.

Tưởng tượng 1 máy tính sử dụng hệ thập phân, thì ta có 10 mức để biểu diễn con số (ta tạm gọi đây là bit – là kiểu dữ liệu đơn giản nhất có thể). Mỗi 1 bit có thể chứa 10 giá trị, không như 2 của hệ nhị phân mà ta biết. 1 byte (8 bit) có thể chứa giá trị từ 0 đến 108 – 1 ~ 100,000,000. Trong khi hiện tại 1 byte chỉ có thể chứa từ 0 đến 28 -1 = 255, quá nhỏ. Máy tính sẽ có thể xử lý và lưu trữ nhiều hơn, kích thước con chip IC sẽ nhỏ lại và các máy tính, smartphone sẽ nhỏ và nhẹ hơn.

Không phải rất tiện sao?

A hèm, coi bộ lý thuyết này có vẻ rất có lợi, nhưng có vẻ nó không khả thi, bởi vì:

  • Lý do thứ 1: Tạo ra nhiều mức cho switch là rất khó. Để có thể tạo ra 10 mức khác nhau, ta cần 1 switch có tới 10 trạng thái. Mà ta biết hiện tại thì công nghệ chưa cho phép điều đó thành khả thi.
  • Lý do thứ 2: Tạo ra đã khó, phát hiện các mức trạng thái càng khó hơn. Ta có thể dễ dàng nhận ra 1 switch có dòng electron đi qua hay không, nhưng để phát hiện nhiều mức trạng thái hơn, thì ta cần phải có nhiều electron hơn. Nó làm cho mạch trở nên phức tạp hơn, và giá thành cũng mắc hơn.
  • Lý do thứ 3: Dễ bị nhiễu tiếng ồn. Với rất nhiều thiết bị điện tử xung quanh, việc bị nhiễu tiếng ồn điện tử có thể làm biến động các mức trạng thái. Nếu chúng ta sử dụng nhiều mức trạng thái, thì độ chênh lệch giữa 2 trạng thái là rất nhỏ, dễ bị nhiễu. Ví dụ như ta sử dụng 1 chip 3.3V, vậy nên với 10 mức trạng thái thì độ chênh lệch sẽ là 0.33V. Độ chênh lệch rất nhỏ nên dễ bị hiểu nhầm nếu bị nhiễu tiếng ồn điện tử.

Vậy tại sao lại không tăng mức lên 33V? Vấn đề ở chỗ đấy, nếu ta tăng mức lên 33V, thì kích thước con chip cũng tăng theo. Vậy nên ta thường dùng chip 5V hoặc 3.3V để giới hạn kích thước và điện năng tiêu thụ của chip.

À ra là vậy. Vậy còn bát phân và thập lục phân thì sao?

Nhũng con số hex rất gọn và linh động phải không nào?
Nhũng con số hex rất gọn và linh động phải không nào?

Như ta đã phân tích trên, chip cần 2 trạng thái để làm việc. Và nếu ai học về máy tính thì biết về các con số “mũ 2” thần thánh, như 1GB RAM = 1024 MB = 210, hay 1 byte = 8 bit = 23. Vậy nên ta không dùng hệ thập phân mà hay sử dụng hệ bát phân, hay thập lục phân.

Ta xét trường hợp thập lục phân nhé. Một lý do đơn giản nhất để sử dụng thập lục phân vì nó biểu diễn 1 con số nhị phân rất đơn giản, không như bát phân hay thập phân. Ta biết là máy tính chỉ hoạt động với số nhị phân (nhị phân thôi nhé, hồi xưa đi học cũng hay hỏi ngu vậy lắm =)) ).

Lấy ví dụ nhé, xét 1 byte có thể chứa các số từ 0 – 255 (0000 0000 – 1111 1111). Nhìn thấy biểu diễn con số mệt chưa? Đi tán gái nó xin số điện thoại mà nói “số của anh là 0 1001 1000 101 10 1 100 100 10 101” chắc nó bỏ luôn quá =)) (đùa thôi). Bởi vì 1 byte có 8 bit, nên ta có thể chia thành 2 nhóm, 4 bit cao và 4 bit thấp. 4 bit này cho ta giá trị trong khoảng 0 – 15, rất phù hợp với hệ thập lục phân, cụ thể là Unicode (thời này mà còn xài ASCII để viết thư tình thì chắc FA suốt quá, đọc thôi cũng đau mắt vì không có dấu rồi =)) ). Ta có thể dùng ký tự “A” thay cho chuỗi bit “1010“, vậy ta chỉ cần dùng 2 ký tự hex để biểu diễn thôi, đơn giản chưa?

Và nếu ta nhìn vào địa chỉ vùng nhớ trong máy tính, hay mã màu RGB chẳng hạn, ta nhận ra rằng nhớ 1 con số thập lục phân nó sẽ “dễ thở” hơn nhớ toàn là 0 với 1. Ta có thể biết là #FFFFFF tượng trưng cho màu trắng, mà nếu viết ra số thập phân hay nhị phân thì… thôi không dám nghĩ tới =)).

Con số mũ 2 thần thánh của các IT-er.
Con số mũ 2 thần thánh của các IT-er.

Còn hệ bát phân thì sao? Trong hệ bát phân, ta có thể dùng 3 bit để biểu diễn thành 1 số oct. Một vấn đề nảy sinh ra là, bát phân chỉ có thể chứa được 3 bit, nhưng 1 byte thì tới 8 bit nên nếu dùng bát phân biểu diễn thì sẽ không vừa đủ như khi ta dùng hệ thập lục phân. Vậy nên hệ bát phân thường dùng trong UNIX để cấp quyền, ví dụ như ta thường thấy 3 quyền cụ thể trong máy tính (read, write, execute), nó có liên quan với hệ bát phân hơn là các hệ khác.

Ai mà học về Linux chắc thấy nhan nhản các command như “chmod 700 japaneseantivirus.txt” để chứa file học tập nhỉ =)). Chmod command dùng để set quyền để thao tác, sử dụng 1 dãy 3 số:

  1. Cá nhân
  2. Một nhóm (mà mình thiết lập trong máy)
  3. Mọi người

Mỗi số đại diễn cho các con số đều cho 1 quyền cụ thể:

  • 0: không cấp quyền gì hết.
  • 1: chỉ thực thi.
  • 2: chỉ viết.
  • 3: viết và thực thi (1 + 2)
  • 4: chỉ đọc.
  • 5: đọc và thực thi (4 + 1)
  • 6: đọc và viết (4 + 2)
  • 7: đọc, viết và thực thi (4 + 2 + 1)

Như quyền “chmod 700 japaneseantivirus.txt” chứa file học tập trên, ta set quyền chỉ có mỗi cá nhân đọc được file đó, những người khác đều không thể đọc được (file học tập mà đọc cái gì =)) ).

Trên đây là bài viết về các hệ số trong máy tính, hi vọng qua đó các bạn có thể hiểu được sâu hơn về những thứ xung quanh ta. Cảm ơn các bạn đã chú ý! Hẹn gặp lại~

About the author

Võ Hoài Sơn

Tính tình bất định
Chọc vào là bịnh
Rất yêu lập trình
Luôn code hết mình
Mình hiện đang là sinh viên của trường ĐH Khoa học tự nhiên TPHCM. Bản thân rất thích code, kiêm luôn cả mần thơ nên thường hơi hâm hâm dở dở. Ngoài ra chém gió, chém chuối, chém trái cây các kiểu cũng là sở trường của mình. Rất mong được làm quen với các bạn :D

Add Comment