<tech-stash />
HomeBlogDSASnippetsAbout
Đăng nhập
© 2026 Thai Bao — Tech Stash
BlogSnippetsAboutRSS
Quay lại Blog
BinaryBasicsMathComputer ScienceDSA

Hệ cơ số 2 (Binary) từ A-Z

15 tháng 5, 202611 phút đọc

Bất kể bạn đang viết code bằng JavaScript hay Python, đang xem một video 4K nét căng hay lướt TikTok, thì ở tận cùng của phần cứng, mọi dữ liệu đó đều bị băm nhỏ thành một chuỗi khổng lồ chỉ gồm hai con số: 0 và 1.

Đó chính là thế giới của Hệ nhị phân (Binary). Tại sao khoa học máy tính lại chọn hệ đếm có vẻ "nghèo nàn" này thay vì hệ thập phân (từ 0 đến 9) quen thuộc của con người? Hãy cùng đi tìm câu trả lời từ gốc rễ Vật lý đến Toán học.

1. Khởi nguồn của thế giới Digital

1.1. Hệ cơ số 2 là gì?

Hệ cơ số 2 đơn giản là một hệ thống đếm chỉ sử dụng đúng hai ký tự: 0 và 1. Mỗi một chữ số 0 hoặc 1 này được gọi là một Bit (Binary Digit). Đây là hạt vật chất nhỏ nhất trong vũ trụ Digital. Khi bạn gộp 8 Bit lại với nhau, bạn sẽ có 1 Byte (Ví dụ: 10110010).

1.2. Tại sao máy tính lại "mù" các số từ 2 đến 9?

Máy tính không chọn số 0 và 1 vì nó thích thế, mà vì giới hạn của Vật lý.

Bộ não của máy tính (CPU) không có mắt để đọc số, nó thực chất là một mạng lưới khổng lồ chứa hàng tỷ công tắc vi mạch siêu nhỏ được gọi là Transistor (Bóng bán dẫn). Một chiếc công tắc điện thì chỉ có thể tồn tại ở 2 trạng thái an toàn và đáng tin cậy nhất:

  • Có dòng điện đi qua (Bật): Đại diện cho số 1.

  • Không có dòng điện (Tắt): Đại diện cho số 0.

Nếu cố gắng chế tạo một phần cứng nhận diện 10 mức điện áp khác nhau (để đại diện cho 0 đến 9), hệ thống sẽ cực kỳ nhiễu loạn, dễ sai số và tỏa nhiệt khủng khiếp. Do đó, kỹ sư máy tính chọn giải pháp: Chỉ dùng 2 trạng thái Bật/Tắt, nhưng ghép hàng tỷ cái công tắc lại với nhau!

2. Toán học cốt lõi: Tư duy theo cách của máy tính

Để hiểu cách máy tính đếm, chúng ta hãy so sánh nó với hệ cơ số 10 (Decimal) mà chúng ta học từ lớp 1. Cả hai hệ đếm này đều tuân theo Nguyên lý vị trí (Positional Notation).

Trong hệ 10, mỗi khi bạn dịch một chữ số sang bên trái, giá trị của nó tăng gấp 10 lần (Hàng đơn vị $\rightarrow$ Hàng chục $\rightarrow$ Hàng trăm). Đây thực chất là các lũy thừa của 10: $10^0, 10^1, 10^2...$

Trong hệ 2, quy luật y hệt, nhưng mỗi khi dịch sang trái, giá trị tăng gấp 2 lần. Các vị trí sẽ là lũy thừa của 2: $2^0, 2^1, 2^2, 2^3, 2^4...$ tương đương với các giá trị: 1, 2, 4, 8, 16...

2.1. Dịch thuật: Từ Nhị phân sang Thập phân (Đọc hiểu)

Làm sao để biết chuỗi 1011 có giá trị là bao nhiêu?

Quy tắc: Đọc từ phải sang trái. Chỗ nào có số 1, ta lấy giá trị lũy thừa của 2 tại vị trí đó cộng lại. Chỗ nào là 0 thì bỏ qua.

  • Vị trí 0 (phải cùng) là 1: Ta lấy $1 \times 2^0$ = 1

  • Vị trí 1 là 1: Ta lấy $1 \times 2^1$ = 2

  • Vị trí 2 là 0: Bỏ qua (bằng 0)

  • Vị trí 3 (trái cùng) là 1: Ta lấy $1 \times 2^3$ = 8

$\rightarrow$ Tổng: 1 + 2 + 0 + 8 = 11. Vậy chuỗi 1011 chính là số 11!

2.2. Dịch thuật: Từ Thập phân sang Nhị phân (Lập mã)

Làm sao để ép máy tính lưu số 13 vào ổ cứng?

Quy tắc: Lấy số đó chia liên tục cho 2, ghi lại số dư. Sau đó đọc ngược các số dư từ dưới lên trên.

  • 13 chia 2 = 6, dư 1

  • 6 chia 2 = 3, dư 0

  • 3 chia 2 = 1, dư 1

  • 1 chia 2 = 0, dư 1 (Dừng lại vì đã đến 0)

$\rightarrow$ Đọc ngược từ dưới lên, số 13 sẽ được ghi vào bộ nhớ dưới dạng: 1101.

3. Máy tính biểu diễn dữ liệu phức tạp như thế nào?

Bạn đã biết cách biến số nguyên dương thành số 0 và 1. Nhưng thế giới này không chỉ có số dương.

3.1. Xử lý số âm với thủ thuật "Bù 2" (Two's Complement)

Máy tính không có dấu trừ -. Để biểu diễn số âm, các nhà khoa học máy tính dùng một thủ thuật thiên tài gọi là Bù 2.

Hiểu đơn giản: Họ quy định Bit ngoài cùng bên trái (Most Significant Bit) sẽ đóng vai trò là "dấu". Nếu bit này là 1, nó là số âm. Nhờ thủ thuật Bù 2, phần cứng máy tính không cần phải chế tạo thêm mạch điện để làm phép trừ, nó thực hiện phép trừ bằng cách cộng một số âm!

3.2. Xử lý Văn bản (Ký tự, Ký hiệu, Emoji)

Làm sao để lưu chữ A? Máy tính tạo ra một cuốn "từ điển".

  • Chuẩn ASCII (đời đầu) quy định: Chữ A in hoa tương ứng với con số 65. Chữ a thường là 97. Từ số 65, máy tính dễ dàng dịch ra hệ nhị phân là 01000001.

  • Khi Internet bùng nổ với tiếng Việt, tiếng Trung, tiếng Ả Rập và cả Emoji, từ điển ASCII (chỉ có 256 ký tự) nhanh chóng cạn kiệt. Đó là lúc chuẩn Unicode (đặc biệt là UTF-8) ra đời, cung cấp không gian đủ lớn để biến mọi ký tự trên hành tinh thành các chuỗi nhị phân dài từ 1 đến 4 Bytes.

3.3. Biểu diễn Hình ảnh và Âm thanh

  • Hình ảnh: Bức ảnh của bạn thực chất là một lưới chứa hàng triệu điểm ảnh (Pixels). Mỗi Pixel được pha trộn từ 3 kênh màu: Đỏ (Red), Xanh lá (Green), Xanh dương (Blue) - gọi tắt là RGB. Mỗi kênh màu có giá trị từ 0 đến 255. Máy tính chỉ cần dịch 3 con số này ra nhị phân là lưu được màu sắc của 1 điểm ảnh!

  • Âm thanh: Âm thanh là các sóng vật lý liên tục. Card âm thanh trên máy tính sẽ lấy mẫu (Sampling) cao độ của sóng này hàng chục ngàn lần mỗi giây, và biến mỗi mức cao độ thành một con số nhị phân. Số bit càng cao (ví dụ âm thanh 16-bit hay 24-bit), bản nhạc nghe càng mượt và chân thực.

4. Thao tác dữ liệu (Operations)

4.1. Cộng trừ cơ bản: Toán học của mẫu giáo

Phép cộng trong hệ nhị phân đơn giản đến mức đáng kinh ngạc. Bạn chỉ cần nhớ đúng 4 quy tắc sau:

  • 0 + 0 = 0

  • 0 + 1 = 1

  • 1 + 1 = 10 (Viết 0 nhớ 1 sang cột bên trái)

  • 1 + 1 + 1 = 11 (Viết 1 nhớ 1 sang cột bên trái)

Ví dụ: Cộng số 5 (là 101) với số 3 (là 011).

  • Cột phải cùng: 1 + 1 = 10 (Viết 0, nhớ 1)

  • Cột giữa: 0 + 1 + 1 (nhớ) = 10 (Viết 0, nhớ 1)

  • Cột trái cùng: 1 + 0 + 1 (nhớ) = 10 (Viết 0, nhớ 1)

  • Kết quả: 1000 (Chính là số 8 trong hệ thập phân!).

4.2. Phép toán Bitwise: Quyền năng của lập trình viên

Trong các ngôn ngữ lập trình bậc cao (như JavaScript, Python), khi bạn dùng dấu + hoặc -, ngôn ngữ sẽ phải chạy qua rất nhiều lớp chuyển đổi. Nhưng nếu bạn dùng Phép toán Bitwise (Thao tác mức Bit), bạn đang ra lệnh trực tiếp cho dòng điện trong CPU! Nó cực kỳ nhanh.

Dưới đây là các "Cổng logic" (Logic Gates) phổ biến nhất:

  • AND (&): Trả về 1 nếu CẢ HAI bit đều là 1. Ngược lại là 0. (Giống như phép nhân).

  • OR (|): Trả về 1 nếu MỘT TRONG HAI bit là 1.

  • XOR (^): Trả về 1 nếu hai bit KHÁC NHAU. Trả về 0 nếu chúng giống nhau.

  • NOT (~): Phép đảo ngược. 0 thành 1, 1 thành 0.

  • Bit Shift (Dịch bit - << hoặc >>): Đẩy toàn bộ chuỗi bit sang trái hoặc phải.

    • Dịch trái 1 bit (5 << 1): Tương đương phép nhân 2 (5 thành 10).

    • Dịch phải 1 bit (5 >> 1): Tương đương phép chia 2 lấy phần nguyên.

5. Ứng dụng thực tế và những "Cú lừa" trong lập trình

Việc không hiểu nền tảng hệ nhị phân đã từng khiến rất nhiều Developer khóc hận trước những bug tưởng chừng như vô lý nhất.

5.1. Nỗi ám ảnh Dấu phẩy động (Floating Point)

Hãy thử mở tab Console trên trình duyệt của bạn và gõ: 0.1 + 0.2 === 0.3. Kết quả trả về sẽ là false. Thậm chí, 0.1 + 0.2 lại in ra một con số quái quỷ: 0.30000000000000004. JavaScript bị lỗi toán học lớp 1 sao?

Không hề! Thủ phạm chính là hệ nhị phân.

Giống như hệ 10 không thể viết chính xác phân số 1/3 (nó cứ kéo dài vô tận 0.33333...), hệ cơ số 2 cũng không thể biểu diễn chính xác hầu hết các số thập phân (như 0.1 hay 0.2).

Khi cố chuyển 0.1 sang nhị phân, nó tạo ra một chuỗi tuần hoàn vô hạn: 0.0001100110011.... Máy tính (theo chuẩn IEEE 754) buộc phải cắt bớt phần đuôi vô tận này để nhét vừa vào bộ nhớ. Sự cắt xén đó dẫn đến sai số siêu nhỏ. Khi cộng chúng lại, sai số này lộ ra.

(Đó là lý do các hệ thống Ngân hàng/Tài chính không bao giờ lưu tiền tệ dưới dạng số thập phân, mà họ nhân nó lên 100 để lưu thành số nguyên!).

5.2. Giới hạn bộ nhớ và Integer Overflow (Tràn số)

Máy tính lưu trữ số liệu trong các hộp chứa cố định (như 8-bit, 16-bit, 32-bit). Chuyện gì xảy ra nếu bạn cố nhét một con số quá lớn vào một cái hộp quá nhỏ? Nó sẽ bị Tràn (Overflow) và quay ngược về con số nhỏ nhất (giống như công tơ mét xe máy chạy đến 99999 sẽ quay lại 00000).

  • Sự cố Y2K: Những năm 199x, để tiết kiệm bộ nhớ cực kỳ đắt đỏ, người ta chỉ dùng 2 chữ số để lưu năm (ví dụ 98 thay cho 1998). Hậu quả là khi bước sang năm 2000, đồng hồ quay về 00, hệ thống máy tính toàn cầu tưởng là năm 1900 và suýt chút nữa làm sập hệ thống hàng không, ngân hàng.

  • Sự cố năm 2038: Hiện tại, chuẩn thời gian của máy tính (Unix Epoch Time) đếm số giây trôi qua từ năm 1970 và lưu trong một biến số nguyên có dấu 32-bit. Con số này chứa được tối đa khoảng 2.14 tỷ. Vào ngày 19 tháng 1 năm 2038, biến đếm này sẽ chạm ngưỡng tối đa. Sau đó, nó sẽ tràn số và quay ngược về số âm (năm 1901). Hàng triệu hệ thống cũ trên thế giới được dự báo sẽ sập nguồn nếu không được nâng cấp lên hệ thống 64-bit.

5.3. Sức mạnh của Bitmasking trong Database

Giả sử bạn cần thiết kế Database để phân quyền người dùng. Bạn có 3 quyền: Read (Đọc), Write (Ghi), Execute (Thực thi). Những người mới học sẽ tạo 3 cột kiểu Boolean trong Database. Tuy nhiên, nếu sau này có 20 quyền khác nhau, bạn sẽ phải tạo 20 cột?

Giải pháp của các Senior: Dùng Bitmasking.

Họ quy ước mỗi quyền là một lũy thừa của 2:

  • READ = 1 (Nhị phân: 001)

  • WRITE = 2 (Nhị phân: 010)

  • EXECUTE = 4 (Nhị phân: 100)

Nếu bạn muốn cấp quyền Đọc và Ghi cho một user, chỉ cần dùng phép OR:

1 | 2 = 3 (Nhị phân: 011). Bạn chỉ cần lưu duy nhất con số 3 vào Database!

Khi muốn kiểm tra xem User đó có quyền Ghi (WRITE = 2) hay không, chỉ cần dùng phép AND:

if ((3 & 2) === 2) $\rightarrow$ Chạy nhanh như một cơn gió và tối ưu bộ nhớ ở mức tuyệt đối!

6. Kết luận: Người anh em Hexadecimal (Hệ cơ số 16)

Sau khi đọc xong series này, bạn đã nắm được cốt lõi của thế giới Digital. Tuy nhiên, nếu bạn in một chuỗi 11010010101... ra màn hình, con người sẽ nổ tung não trước khi đọc được.

Để giải quyết vấn đề đó, con người đã tạo ra hệ Hexadecimal (Hệ cơ số 16). Thay vì dùng 2 chữ số, nó dùng 16 ký tự (Từ 0 đến 9, và từ A đến F).

Điều kỳ diệu là: Cứ đúng 4 số nhị phân (4 bit) thì quy đổi vừa khít thành 1 ký tự Hexadecimal. Hệ 16 thực chất không phải là cách máy tính hoạt động. Nó chỉ là một lớp "make-up", một cách viết tắt siêu gọn gàng của hệ nhị phân để lập trình viên dễ đọc hơn. Đó là lý do bạn thường xuyên thấy bảng màu CSS có dạng #FF0000 (Màu đỏ) hay địa chỉ ví Crypto có dạng 0x71C... thay vì một dãy số 0 và 1 dài ngoằng.

Hiểu về Hệ nhị phân không chỉ giúp bạn làm toán tốt hơn, mà nó là chìa khóa để bạn thực sự "trò chuyện" và thấu hiểu cỗ máy mà bạn đang làm việc cùng mỗi ngày!

Bình luận

Đăng nhập để bình luận
Đang tải bình luận...
On this page
  • 1. Khởi nguồn của thế giới Digital
  • 1.1. Hệ cơ số 2 là gì?
  • 1.2. Tại sao máy tính lại "mù" các số từ 2 đến 9?
  • 2. Toán học cốt lõi: Tư duy theo cách của máy tính
  • 2.1. Dịch thuật: Từ Nhị phân sang Thập phân (Đọc hiểu)
  • 2.2. Dịch thuật: Từ Thập phân sang Nhị phân (Lập mã)
  • 3. Máy tính biểu diễn dữ liệu phức tạp như thế nào?
  • 3.1. Xử lý số âm với thủ thuật "Bù 2" (Two's Complement)
  • 3.2. Xử lý Văn bản (Ký tự, Ký hiệu, Emoji)
  • 3.3. Biểu diễn Hình ảnh và Âm thanh
  • 4. Thao tác dữ liệu (Operations)
  • 4.1. Cộng trừ cơ bản: Toán học của mẫu giáo
  • 4.2. Phép toán Bitwise: Quyền năng của lập trình viên
  • 5. Ứng dụng thực tế và những "Cú lừa" trong lập trình
  • 5.1. Nỗi ám ảnh Dấu phẩy động (Floating Point)
  • 5.2. Giới hạn bộ nhớ và Integer Overflow (Tràn số)
  • 5.3. Sức mạnh của Bitmasking trong Database
  • 6. Kết luận: Người anh em Hexadecimal (Hệ cơ số 16)