Hồ Bảo Tín Wiki
Vào thế giới

🧠 Tư duy lập trình

Mã nhị phân bằng năm tấm thẻ giấy: đếm từ 0 đến 31 như máy tính

8 phút đọc · cập nhật

Trong bài
  1. Vì sao máy tính chỉ dùng 0 và 1
  2. Làm năm tấm thẻ nhị phân
  3. Đọc và viết số bằng thẻ
  4. Bao nhiêu thẻ thì đếm được tới đâu
  5. Từ con số tới chữ cái, hình ảnh
  6. Ai nghĩ ra hệ nhị phân
  7. Thử làm: gửi tin nhắn bí mật bằng nhị phân

Mã nhị phân là cách viết mọi con số chỉ bằng hai kí hiệu 0 và 1. Với năm tấm thẻ giấy lần lượt có 1, 2, 4, 8 và 16 chấm, mỗi thẻ hoặc ngửa (1) hoặc úp (0), bạn biểu diễn được mọi số từ 0 đến 31. Máy tính lưu chữ, ảnh, nhạc và cả đoạn phim theo đúng nguyên tắc này, chỉ là dùng hàng tỉ "tấm thẻ" thay vì năm.

Vì sao máy tính chỉ dùng 0 và 1

Bên trong máy tính có rất nhiều công tắc cực nhỏ. Mỗi công tắc chỉ có hai trạng thái: có điện hoặc không có điện, bật hoặc tắt. Ta gọi một trạng thái là 1, trạng thái kia là 0.

Tại sao không dùng mười mức điện cho mười chữ số từ 0 đến 9, như cách ta vẫn đếm? Vì phân biệt "có" và "không" thì rất chắc chắn, còn phân biệt mười mức điện gần nhau thì dễ nhầm, nhất là khi linh kiện nóng lên hay điện chập chờn. Hai trạng thái làm máy đơn giản, rẻ và ít sai. Mỗi chữ số 0 hoặc 1 được gọi là một bit, viết tắt của binary digit, nghĩa là chữ số nhị phân.

Làm năm tấm thẻ nhị phân

Hoạt động thẻ nhị phân được phổ biến rộng rãi qua bộ tài liệu Khoa học máy tính không cần máy tính (CS Unplugged) do giáo sư Tim Bell và đồng nghiệp ở Đại học Canterbury, New Zealand, soạn ra, và nay được thầy cô nhiều nước dùng trên lớp.

Cắt năm tấm bìa cỡ bàn tay. Một mặt để trắng. Mặt kia vẽ chấm tròn:

  • Thẻ thứ nhất: 1 chấm
  • Thẻ thứ hai: 2 chấm
  • Thẻ thứ ba: 4 chấm
  • Thẻ thứ tư: 8 chấm
  • Thẻ thứ năm: 16 chấm

Mỗi thẻ có số chấm gấp đôi thẻ trước. Xếp thẻ thành hàng ngang, thẻ 16 chấm ở bên trái, thẻ 1 chấm ở bên phải: 16 – 8 – 4 – 2 – 1. Thứ tự này giống cách ta viết số thường: hàng lớn ở bên trái.

Đọc và viết số bằng thẻ

Quy tắc chỉ có một: thẻ nào ngửa mặt có chấm thì tính, thẻ nào úp thì bỏ qua. Ngửa ghi 1, úp ghi 0.

Đọc số

Thẻ đang là: úp – ngửa – ngửa – úp – ngửa. Viết thành 01101. Đếm chấm trên các thẻ ngửa: 8 + 4 + 1 = 13. Vậy 01101 trong hệ nhị phân là số 13.

Viết số

Muốn biểu diễn số 22? Bắt đầu từ thẻ lớn nhất. 16 có nhỏ hơn hoặc bằng 22 không? Có, lật ngửa, còn thiếu 6. Thẻ 8 lớn hơn 6, để úp. Thẻ 4 thì được, lật ngửa, còn thiếu 2. Thẻ 2 vừa đủ, lật ngửa, còn 0. Thẻ 1 để úp. Kết quả: 10110.

Để ý cách làm này là một thuật toán: lần lượt từ trái sang phải, nếu số chấm của thẻ không vượt quá phần còn thiếu thì lật ngửa và trừ đi, không thì để úp. Có cả vòng lặp lẫn điều kiện nếu–thì.

Bảng các số từ 0 đến 10

Số thườngThẻ 8Thẻ 4Thẻ 2Thẻ 1Viết nhị phân
000000000
100010001
200100010
300110011
401000100
501010101
601100110
701110111
810001000
910011001
1010101010

Nhìn cột "Thẻ 1": nó đổi mỗi lần. Cột "Thẻ 2" đổi sau mỗi hai số. Cột "Thẻ 4" đổi sau mỗi bốn số. Quy luật gấp đôi này lặp lại mãi, và nhờ nó mà bạn có thể đếm tiếp mà không cần bảng.

Bao nhiêu thẻ thì đếm được tới đâu

Lật ngửa cả năm thẻ: 16 + 8 + 4 + 2 + 1 = 31. Tính cả số 0 (úp hết), năm thẻ cho ra 32 số khác nhau. Mỗi khi thêm một thẻ, số chấm của thẻ mới gấp đôi thẻ lớn nhất cũ, và số lượng các số biểu diễn được cũng gấp đôi.

  • 5 thẻ: 32 số (0 đến 31)
  • 8 thẻ: 256 số (0 đến 255)
  • 10 thẻ: 1.024 số (0 đến 1.023)

Tám bit ghép lại được gọi là một byte. Con số 256 vì thế xuất hiện khắp nơi trong máy tính. Ví dụ, nhiều chương trình vẽ cho chọn mỗi màu đỏ, xanh lá, xanh lam theo 256 mức, từ 0 đến 255, mỗi màu dùng đúng một byte.

Đếm tới 31 bằng một bàn tay

Coi mỗi ngón tay là một thẻ: ngón cái là 1, ngón trỏ là 2, ngón giữa là 4, ngón áp út là 8, ngón út là 16. Ngón giơ lên là 1, ngón gập là 0. Một bàn tay đếm được từ 0 đến 31, hai bàn tay tới 1.023, trong khi đếm kiểu thường chỉ được tới 10. Lúc đầu gập riêng ngón áp út khá khó, tập vài hôm sẽ quen.

Từ con số tới chữ cái, hình ảnh

Máy tính chỉ lưu số, vậy chữ cái lưu thế nào? Người ta thoả thuận một bảng mã: mỗi chữ ứng với một con số. Trong bảng mã chuẩn dùng rất rộng rãi, chữ A in hoa ứng với số 65, viết nhị phân là 1000001. Chữ B là 66, chữ C là 67, và cứ thế. Tiếng Việt có nhiều chữ có dấu như ă, ơ, ữ, nên cần một bảng mã lớn hơn gọi là Unicode, nơi gần như mọi chữ viết trên thế giới đều có số riêng.

Ảnh thì sao? Một bức ảnh đen trắng đơn giản có thể chia thành lưới ô vuông, ô đen ghi 1, ô trắng ghi 0. Ảnh màu thì mỗi ô ghi ba con số cho mức đỏ, xanh lá, xanh lam. Âm thanh được ghi bằng cách đo độ rung của không khí hàng chục nghìn lần mỗi giây, mỗi lần đo là một con số. Mọi thứ trên màn hình rốt cuộc đều là một dãy 0 và 1 rất dài.

Ai nghĩ ra hệ nhị phân

Ý tưởng dùng hai kí hiệu để biểu diễn số có từ rất lâu. Năm 1703, nhà toán học và triết học người Đức Gottfried Wilhelm Leibniz công bố một bài viết về số học nhị phân. Trong bài, ông nhắc đến các quẻ trong Kinh Dịch của Trung Hoa cổ, ghép từ hào liền và hào đứt, mà ông thấy rất giống cách viết số chỉ bằng 0 và 1. Leibniz biết đến Kinh Dịch qua thư từ với một nhà truyền giáo người Pháp sống ở Trung Hoa.

Leibniz không có máy tính điện tử để dùng ý tưởng của mình. Phải hơn hai thế kỷ sau, khi các kỹ sư làm máy bằng công tắc và mạch điện, hệ nhị phân mới trở thành ngôn ngữ chung của mọi máy tính.

Thử làm: gửi tin nhắn bí mật bằng nhị phân

Làm theo cặp, mất khoảng 30 phút. Cần năm tấm thẻ chấm ở trên (mỗi bạn một bộ), giấy, bút, và nếu thích thì hai màu hạt cườm, dây xâu.

Bước 1: thoả thuận bảng mã

Đánh số chữ cái: A = 1, B = 2, C = 3… cho tới Z = 26 (dùng bảng chữ cái tiếng Anh, bỏ dấu cho đơn giản). Vì 26 nhỏ hơn 31, năm thẻ là đủ cho mọi chữ.

Bước 2: mã hoá

Một bạn chọn một từ ngắn, ví dụ HI. Chữ H là 8, viết bằng thẻ: 01000. Chữ I là 9: 01001. Bạn ấy viết dãy 01000 01001 lên giấy, hoặc lật thẻ cho bạn kia xem từng chữ.

Bước 3: giải mã

Bạn kia đổi từng nhóm năm chữ số ra số thường, rồi ra chữ cái. Thử với từ dài hơn, hoặc gửi bằng tín hiệu: giơ tay là 1, khoanh tay là 0; đèn pin bật là 1, tắt là 0.

Biến thể: vòng tay ghi tên

Dùng hạt hai màu, ví dụ hạt trắng là 0, hạt xanh là 1. Mỗi chữ cái trong tên là một cụm năm hạt, giữa hai chữ xâu một hạt màu thứ ba để ngăn cách. Bạn sẽ có một vòng tay mà chỉ người biết mã mới đọc được. Hạt nhỏ nên cất xa tầm tay em bé.

Câu hỏi để nghĩ thêm: nếu muốn mã cả chữ có dấu của tiếng Việt thì năm thẻ còn đủ không? Cần thêm bao nhiêu thẻ?

Câu hỏi thường gặp

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

Hệ nhị phân là cách viết số chỉ dùng hai chữ số 0 và 1. Mỗi vị trí có giá trị gấp đôi vị trí bên phải nó: 1, 2, 4, 8, 16 và cứ thế. Máy tính dùng hệ này vì mạch điện bên trong chỉ cần phân biệt hai trạng thái có điện và không có điện.

Làm sao đổi số thường sang nhị phân?

Một cách dễ là dùng các giá trị 16, 8, 4, 2, 1. Bắt đầu từ giá trị lớn nhất không vượt quá số cần đổi, ghi 1 và trừ đi; giá trị nào lớn hơn phần còn lại thì ghi 0. Ví dụ 13 bằng 8 cộng 4 cộng 1, viết là 1101.

Bit và byte khác nhau thế nào?

Bit là một chữ số nhị phân, chỉ có thể là 0 hoặc 1. Byte gồm 8 bit ghép lại, biểu diễn được 256 giá trị khác nhau, từ 0 đến 255. Dung lượng bộ nhớ và tệp tin thường được tính bằng byte và các bội số của nó.

Đếm đến 31 bằng một bàn tay thế nào?

Gán cho năm ngón tay các giá trị 1, 2, 4, 8, 16. Ngón giơ lên thì cộng giá trị của ngón đó, ngón gập thì không. Giơ cả năm ngón là 31, gập hết là 0, và mọi số ở giữa đều có một cách giơ ngón riêng.

Ai phát minh ra hệ nhị phân?

Nhiều nền văn hoá đã có những ý tưởng tương tự từ lâu. Người thường được nhắc đến là Gottfried Wilhelm Leibniz, nhà toán học người Đức, với bài viết về số học nhị phân năm 1703. Hệ nhị phân trở thành nền tảng của máy tính điện tử vào thế kỷ 20.

mã nhị phânhệ nhị phânbit và bytethẻ nhị phânCS UnpluggedLeibnizKinh Dịchđếm bằng ngón taymật mã cho trẻ

Đọc tiếp