Module 1 — Biểu diễn dữ liệu: tổng quan
Mọi thứ trong máy tính đều là bit. Module dạy cách số nguyên, số thực, văn bản và byte order được mã hoá nhị phân — gốc rễ của tràn số, lỗi làm tròn float và lỗi font.
TL;DR: CPU không hiểu "số 42", "chữ A" hay "số 3.14" — nó chỉ thấy các bit 0 và 1. Mọi kiểu dữ liệu bạn dùng hằng ngày đều là một quy ước mã hoá các bit đó. Module này bóc tách 5 quy ước cốt lõi: nhị phân/hex, số nguyên (two's complement), số thực (IEEE 754), văn bản (UTF-8), và byte order. Hiểu chúng, bạn sẽ thôi ngạc nhiên khi 0.1 + 0.2 ra 0.30000000000000004 hay khi một chuỗi tiếng Việt hiện thành ô vuông.
Vì sao module này tồn tại
Bạn đã viết int x = 2_000_000_000; x = x + x; và nhận kết quả âm. Bạn đã thấy 0.1 + 0.2 != 0.3 trả về true. Bạn đã mở một file và thấy Tiếng Việt biến thành Tiếng Viá»t. Ba hiện tượng tưởng không liên quan này có chung một gốc rễ: dữ liệu trong máy tính chỉ là bit, và mỗi kiểu dữ liệu là một cách diễn giải các bit đó. Khi quy ước diễn giải va chạm với giới hạn vật lý (số bit hữu hạn) hoặc với một quy ước khác, bạn gặp bug.
Module này không dạy bạn "ghi nhớ bảng ASCII". Nó dạy bạn cơ chế: vì sao máy chọn nhị phân, vì sao số âm được lưu kiểu two's complement, vì sao float không bao giờ chính xác tuyệt đối.
Sau module này bạn sẽ
- Explain một byte lưu được bao nhiêu giá trị và cách chuyển đổi nhị phân ↔ hex trong đầu.
- Predict khi nào một phép cộng số nguyên tràn và kết quả ra sao.
- Explain vì sao
0.1không biểu diễn chính xác được và khi nào dùng số thực là sai lầm (ví dụ: tiền tệ). - Trace cách UTF-8 mã hoá một ký tự tiếng Việt thành nhiều byte và chẩn đoán lỗi font.
- Implement vài thao tác bit-level (mask, shift, flag) cho code thực tế.
Lộ trình module
Bài 01 đặt nền: bit, byte, vì sao nhị phân, và hex như một cách viết tắt cho người. Bài 02 xây trên đó để giải thích số nguyên có dấu — two's complement và hiện tượng tràn số. Bài 03 chuyển sang số thực: IEEE 754, lý do 0.1 + 0.2 lệch, và quy tắc chọn kiểu dữ liệu cho tiền. Bài 04 rời thế giới số sang văn bản: ASCII, Unicode, UTF-8 và vì sao một ký tự không còn là một byte. Bài 05 khép lại với byte order (endianness) và một bộ thao tác bit-level thực dụng. Bài 06 là cheat sheet tổng kết để bookmark.
Trình tự là bottom-up có chủ đích: bạn không thể hiểu two's complement nếu chưa nắm bit, và không hiểu nổi UTF-8 nếu chưa quen hex.
Bản đồ 5 bài, đi từ bit cơ bản tới byte order và thao tác bit:
flowchart LR A["01 Bit byte hex"] --> B["02 So nguyen + tran so"] B --> C["03 So thuc IEEE 754"] C --> D["04 Unicode UTF-8"] D --> E["05 Byte order + bit ops"]
Yêu cầu trước khi bắt đầu
- Biết lập trình cơ bản bằng một ngôn ngữ bất kỳ (đọc được vòng lặp, biến, hàm).
- Không cần kiến thức toán cao — chỉ cần cộng trừ và hiểu khái niệm "cơ số".
Time budget
- Module: ~1.5 giờ đọc.
| Bài | Chủ đề | Phút |
|---|---|---|
| 01 | Bit, byte và hệ cơ số | 12 |
| 02 | Số nguyên và tràn số | 16 |
| 03 | Số thực IEEE 754 | 18 |
| 04 | Văn bản: Unicode và UTF-8 | 17 |
| 05 | Byte order và thao tác bit | 18 |
| 06 | Tổng kết & cheat sheet | 12 |
Cách học module này hiệu quả
- Mở một REPL (Python, JS console, hoặc
jshell) và tự gõ lại từng ví dụ — đặc biệt các phép tràn số và0.1 + 0.2. Thấy tận mắt mạnh hơn đọc. - Khi gặp số hex, tập đọc thành nhị phân 4-bit thay vì quy ra thập phân. Hex tồn tại chính vì nó ánh xạ gọn sang bit.
- Đừng bỏ qua khối "Áp dụng vào code của bạn" cuối mỗi bài — đó là chỗ lý thuyết biến thành quyết định thật.
Bài tiếp theo: Bit, byte và hệ cơ số
Bài này có giúp bạn hiểu bản chất không?
Hỏi đáp về bài này
Chưa có câu hỏi
Có gì chưa rõ trong bài? Đặt câu hỏi đầu tiên — câu trả lời từ cộng đồng giúp bạn (và người sau).
Đặt câu hỏi đầu tiên