Binary Number – Hệ nhị phân

01010100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01110011 01110101 01100011 01101011 00100001

01010100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01110011 01110101 01100011 01101011 00100001

– số nhị phân –

Hệ nhị phân là gì?

Trong cuộc sống thường ngày, người ta hay sử dụng hệ đếm thập phân – nghĩa là sử dụng 10 chữ số để đếm mọi thứ: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.

Thập phân trong tiếng anh là Decimal. Ta đếm số tăng dần trong hệ thập phân như hình bên dưới:

Cứ đủ 10 đơn vị, vị trí gần nhất bên trái sẽ tăng thêm 1.

Tương tự hệ đếm thập phân, hệ đếm nhị phân cũng có khái niệm tương tự. Thay vì sử dụng 10 chữ số để đếm, người ta chỉ sử dụng… 2 chữ số là 0 và 1.

Nhị phân trong tiếng anh là Binary. Ta cũng đếm số tăng dần trong hệ nhị phân như hình bên dưới:

Cứ đủ 2 đơn vị, vị trí gần nhất bên trái sẽ tăng thêm 1.

Nếu để ý, các bạn sẽ thấy ứng với mỗi 1 số nhị phân sẽ có 1 số thập phân tương ứng. VD: 1000 (binary) = 8 (decimal).

Như vậy, nhị phân hay thập phân cũng chỉ là các hệ đếm khác nhau mà thôi, không có gì quá phức tạp cả.

Câu chuyện Lúa Mì và Ô Bàn Cờ

Có một truyền thuyết của Ấn Độ kể rằng, Sessa – một nhà hiền triết đã được đức vua ban thưởng. Thay vì vàng bạc châu báu, ông đã xin nhà vua thưởng bằng những hạt lúa với điều kiện như sau:

  • 1 hạt ở ô thứ nhất, 2 hạt ở ô thứ hai, 4 hạt ở ô thứ ba,… cứ thế cho tới ô cuối cùng.

Nghe vậy, nhà vua rất ngạc nhiên vì sự khiêm tốn ấy. Bàn cờ chỉ có 64 ô thì được bao nhiêu lúa cơ chứ, ta thậm chí có thể nuôi cả một đất nước cơ mà!?

Và tất nhiên, chúng ta đã đều biết kết cục của câu chuyện rồi.

Ô cuối cùng sẽ cần 2^63 hạt lúa – một số lượng mà cả địa cầu cũng không chứa nổi.

Binary, Bit và Byte

Cũng giống như bàn cờ trong câu chuyện bên trên, bộ nhớ của máy tính cũng hoạt động tương tự kiểu vậy.

Mỗi một ô trên bàn cờ là một ô nhớ – hay còn gọi là 1 bit.

Một ô cờ sẽ có 2 trạng thái: có và không có lúa. Tương tự một bit chỉ chứa 1 trong 2 giá trị binary: 0 hoặc 1.

Tổng số hạt lúa trên bàn cờ chính bằng giá trị lớn nhất mà một tập hợp các bit dữ liệu có thể nhớ được.

Một tập hợp 8 ô bit sẽ bằng 1 byte.

1 Byte = 8 bits

Bằng cách thay đổi giá trị của từng bit, 1 byte có thể biểu thị tối đa 256 giá trị. 256 giá trị này bắt đầu từ số 0 nên thực chất chúng chỉ có thể biểu thị được tới số 255 mà thôi.

1 pixel ảnh trên màn hình sẽ được biểu diễn bằng 1 màu riêng của nó. Mỗi 1 màu sẽ có 1 giá trị RGB khác nhau, thông thường sẽ tốn 3 bytes để lưu 1 màu. Trong đó Red chiếm 1 byte, Green chiếm 1 byte và Blue chiếm 1 byte.

1 byte có thể biểu thị được 256 giá trị (0 – 255). Kết hợp lại ta sẽ có 256 x 256 x 256 = 16,777,216 màu.

~Thông tin ngoài lề~

Chuyển đổi Decimal – Binary

Trở lại câu chuyện lúa mì và ô bàn cờ. Nhà vua sẽ phải đặt gấp đôi số lúa cho ô cờ kế tiếp, giả sử nếu chỉ có 8 ô cờ thì số hạt lúa mỗi ô sẽ là: 1, 2, 4, 8, 16, 32, 64, 128.

Do ô sau gấp đôi ô trước, nên có thể sử dụng hàm mũ để tính nhanh số lượng lúa mì trong mỗi ô.

Hãy coi 8 ô cờ này là 8 bit. Như đã nói bên trên, tổng số lúa trên bàn cờ 8 ô này chính bằng giá trị lớn nhất mà 8 bit này có thể ghi nhớ – 255.

Để chuyển đổi từ thập phân sang nhị phân, ta phải đổ đầy lúa mì vào ô chứa lớn nhất có thể mà không được thừa bất kì hạt lúa mì nào.

VD: chuyển đổi số 165 sang nhị phân như sau:

  • Xác định số bit cần để biểu diễn. Với 8 bit, ta có thể biểu diễn được tới số 255. Số 165 nằm trong khoảng này nên ta có thể biểu diễn bằng 8 bit.
Cần 1 byte để nhớ được số 165.
  • Đổ đầy vào ô chứa lớn nhất có thể. Do 165 > 128, nên ô cuối cùng sẽ phải là 128. Còn lại 165 – 128 = 37.
  • Tiếp tục đổ đầy. Do 37 < 64, ta không đổ vào ô này vì không thể đổ đầy.
  • Tiếp tục. Ta có 37 > 32, nên ô này sẽ được đổ đầy. Còn lại 37 – 32 = 5.
  • Lại có 5 < 16, 5 < 8, nên 2 ô này không đổ.
  • 5 > 4. Đổ đầy vào ô này, còn lại 5 – 4 = 1.
  • Làm tương tự tới ô cuối cùng.
  • Bit chỉ quan tâm là nó có hoặc không lưu giá trị mà thôi. Các ô màu xanh là có giá trị và các ô đỏ là không. Như vậy 165 = 10100101.

Ngược lại, chuyển đổi từ nhị phân sang thập phân thì rất đơn giản, ta chỉ cần cộng tổng các ô giá trị của chúng lại.

Ở ví dụ ban nãy, 165 = 10100101. Hãy cùng mình chuyển đổi ngược lại về hệ thập phân xem sao.

  • Đầu tiên, ta tô lại màu của chúng như bên dưới, với 1 là xanh, 0 là đỏ.
  • Điền giá trị của mỗi ô vào. Với ô đầu tiên là 2^0, ô thứ 2 là 2^1,… cho tới ô thứ n là 2^(n-1). Ta có 8 chữ số nên ô thứ 8 sẽ có giá trị 2^7 = 128.
  • Cuối cùng, cộng tổng của tất cả các ô màu xanh lại. 128 + 32 + 4 + 1 = 165.

Tada, vậy là các bạn đã biết cách qui đổi xuôi và ngược giữa hệ thập phân và hệ nhị phân rồi.

Ngoài ra trong các chương trình sách giáo khoa, người ta còn sử dụng một phương pháp khác là chia 2 một số liên tục. Nếu tò mò, các bạn hãy tìm kiếm thêm trên google nhé.

Tuy nhiên, trọng điểm ở phần này lại không đòi hỏi bạn… nắm được cách qui đổi mà mình muốn các bạn nắm được một tính chất nghe có vẻ rất hiển nhiên:

Một số nhị phân luôn chỉ có một số thập phân tương ứng với nó.

Tính chất này rất quan trọng, chúng thường được dùng trong những bài toán kiểm tra nhiều điều kiện như cách làm phản ứng nguyên tố trong Genshin Impact. (Mình sẽ cập nhật sau bài này hen).

Chủ đạo combat của Genshin Impact là dựa vào phản ứng nguyên tố

Kiểu dữ liệu Boolean (Bonus)

Khi nói đến Binary, ta không thể không nhắc đến Boolean.

Nói thực thì boolean là một kiểu dữ liệu khá kì lạ. Nó không lưu trữ số mà được lưu dưới dạng logic: true (đúng) hoặc false (sai).

Một số ngôn ngữ lập trình coi 0 là false các số nguyên còn lại là true. Thông thường mọi người dùng 1 để thay cho giá trị true này.

Về lí thì 1 bool sẽ chỉ cần 1 bit để lưu trữ vì nó chỉ có 2 trạng thái true hoặc false nhưng khảo ra mới biết nó dùng tới 1 byte lận! (Ai mà biết nó làm cái gì chứ!?)

Tổng kết

Qua bài này chắc hẳn các bạn đã có một cái nhìn tổng quan về hệ nhị phân (và cả thập phân) rồi.

Ngoài ra, mình tìm thấy một video rất hay nói về lịch sử ra đời và hệ thống số chúng ta đang sử dụng ngày nay. Rất đáng để tham khảo.

Hi vọng các bạn sẽ thích chúng!

Kurrwo

Công nhân👷gõ 💬 văn bản ⌨️ trò chơi 🎮 điện tử 📱 👏👏👏

Post navigation

Subscribe
Notify of
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments