Menu

Chuyển đổi hệ cơ số

Chuyển số giữa hệ nhị phân, bát phân, thập phân và thập lục phân.

Tác giả Nethanel Bar, Co-founder & CEO

Cập nhật lần cuối

Sẵn sàng học code thật sự?

Coddy dạy bạn bằng cách viết code thật ngay trên trình duyệt: bài học tương tác, phản hồi tức thì và AI hỗ trợ khi bạn bị kẹt.

Công cụ chuyển đổi hệ cơ số là gì?

Công cụ chuyển đổi hệ cơ số nhận một số viết trong một hệ đếm (nhị phân, bát phân, thập phân hoặc thập lục phân) và viết lại nó trong bất kỳ hệ nào khác. Lập trình viên dùng nó khi đọc bitmask, gỡ lỗi mã màu, giải mã cờ trong gói tin giao thức, làm việc với thanh ghi phần cứng, và đổi qua lại giữa hex và thập phân ở mọi nơi, từ CSS, hợp ngữ đến mật mã.

Bản thân con số không thay đổi giữa các hệ cơ số, chỉ có *cách biểu diễn* thay đổi. 255 trong hệ thập phân là 0xFF trong hex, 0b11111111 trong nhị phân và 0o377 trong bát phân. Đó là bốn cách viết khác nhau cho cùng một giá trị.

Công cụ hiện đại cần xử lý được số lớn mà không mất độ chính xác. Hàm parseInt thông thường của JavaScript âm thầm làm tròn mọi số vượt quá 2⁵³, gây ra những bug khó thấy với giá trị thanh ghi 64 bit, ID và timestamp. Một công cụ chuyển đổi tốt dùng BigInt bên dưới để một giá trị hex 256 bit được đổi đi rồi đổi lại vẫn nguyên vẹn.

Bạn sẽ học được gì khi chuyển đổi hệ cơ số

  • Nhị phân dùng 2 chữ số (0, 1), bát phân dùng 8, thập phân dùng 10, còn thập lục phân dùng 16 (từ 0 đến 9 và từ a đến f).
  • Mỗi chữ số nhị phân là một *bit*. 4 bit = 1 chữ số hex. 8 bit = 1 byte = 2 chữ số hex.
  • Hex chỉ là một cách gọn để đọc nhị phân. 0xCAFE trong nhị phân là 1100 1010 1111 1110, nhìn hex dễ hơn nhiều.
  • Số lớn hơn 2⁵³ bị mất độ chính xác trong JavaScript thông thường. Hãy dùng BigInt (123n) khi làm việc với số nguyên lớn.

Cách chuyển đổi giữa các hệ cơ số từng bước

  1. Chọn hệ cơ số đầu vào

    Chọn nhị phân, bát phân, thập phân hoặc thập lục phân, tùy theo số bạn đang có.

  2. Gõ giá trị

    Hex chấp nhận cả ff lẫn 0xff. Nhị phân chấp nhận cả 1010 lẫn 0b1010. Công cụ tự động bỏ tiền tố.

  3. Xem mọi hệ cơ số cùng lúc

    Cả bốn cách biểu diễn của cùng một số hiện ra ngay lập tức. Nhấn vào cách nào để sao chép cách đó.

  4. Bật nhóm chữ số cho dễ đọc

    Nhóm nhị phân theo 4 bit (1100 1010 1111 1110) và hex theo 2 ký tự (CA FE). Rất tiện khi kiểm tra bitfield và bản dump.

Bảng tra nhanh các hệ cơ số

Các giá trị tham khảo thường gặp trong cả bốn hệ cơ số. BigInt và ngữ pháp literal số của JavaScript giải thích cú pháp dùng bên dưới.

Thập phânNhị phânBát phânHex
0000
1111
81000108
10101012A
16100002010
321000004020
64100000010040
100110010014464
1281000000020080
25511111111377FF
256100000000400100
1024100000000002000400
655351111111111111111177777FFFF

Ví dụ chuyển đổi hệ cơ số để thử

Mã màu RGB

Hex
color: #ff8800;
Thập phân
color: rgb(255, 136, 0);

Mỗi cặp chữ số hex là một byte (từ 0 đến 255) cho một kênh màu. ff = 255, 88 = 136, 00 = 0.

Đọc một bitmask quyền truy cập

Thập phân

5

Nhị phân

0b101

Đọc các bit

Bit 0 (đọc) được bật, bit 2 (thực thi) được bật, bit 1 (ghi) thì không. Vậy quyền là đọc + thực thi.

Chế độ tệp trên Unix (chmod), feature flag và gói tin giao thức đều mã hóa nhiều giá trị boolean thành các bit trong một số nguyên duy nhất. Dạng nhị phân giúp bạn nhìn thấy điều đó.

Chuyển đổi chính xác với BigInt

Hex (rất lớn)

0xFFFFFFFFFFFFFFFF

Thập phân

18446744073709551615

Đây là số nguyên không dấu 64 bit lớn nhất. Hàm parseInt thông thường của JavaScript sẽ làm mất độ chính xác; BigInt xử lý gọn gàng.

Lỗi thường gặp khi chuyển đổi hệ cơ số

  • Nhầm *con số* với *literal*. 0x10 và 10 trông giống nhau nhưng là 16 và 10: luôn ghi tiền tố hệ cơ số trong code.
  • Đọc hex từ trái sang phải mà quên thứ tự byte (endianness) khi xem bản dump bộ nhớ thô.
  • Dùng parseInt(big, 16) trong JavaScript với giá trị lớn hơn 2⁵³. Hãy dùng BigInt('0x' + hex) thay thế.
  • Thêm số 0 vào byte sai chỗ. 0xF viết thành một byte là 0x0F, không phải 0xF0: số 0 ở đầu rất quan trọng với các trường có độ dài cố định.
  • Lẫn lộn cách hiểu có dấu và không dấu. Hex 0xFFFF_FFFF là 4294967295 khi không dấu nhưng là -1 khi có dấu (bù hai).

Câu hỏi thường gặp về chuyển đổi hệ cơ số

Làm sao đổi nhị phân sang thập phân?
Nhân mỗi chữ số nhị phân với lũy thừa tương ứng của 2, bắt đầu từ bên phải. Với 1010: 1·8 + 0·4 + 1·2 + 0·1 = 10. Hoặc dán số vào công cụ chuyển đổi hệ cơ số để có ngay kết quả.
Làm sao đổi thập phân sang hex?
Chia số thập phân cho 16 nhiều lần, ghi lại các số dư (từ 0 đến 15, với 10 đến 15 viết thành A đến F). Đọc các số dư từ dưới lên. 255 ÷ 16 = 15 remainder 15 → FF.
Hệ thập lục phân dùng để làm gì?
Hex được dùng ở bất cứ đâu cần một dạng gọn và dễ đọc của nhị phân: mã màu (#ff8800), địa chỉ bộ nhớ, bản dump tệp, địa chỉ MAC, hash và hầu hết các hệ thống cấp thấp.
Bát phân và thập lục phân khác nhau thế nào?
Bát phân là hệ cơ số 8 (chữ số từ 0 đến 7); thập lục phân là hệ cơ số 16 (chữ số từ 0 đến 9 và từ A đến F). Ngày nay bát phân ít gặp nhưng vẫn xuất hiện trong quyền truy cập tệp trên Unix (0755) và một số literal số trong họ ngôn ngữ C.
Vì sao số nhị phân tăng nhanh như vậy?

Mỗi chữ số mới làm số giá trị biểu diễn được tăng gấp đôi. 8 bit biểu diễn được 256 giá trị; 16 bit được 65.536; 32 bit được hơn 4 tỷ. Đó là lý do bitmask chứa được nhiều ý nghĩa trong một con số nhỏ.

Tìm hiểu thêm

Công cụ lập trình khác

Hình minh họa các ngôn ngữ lập trình của Coddy

Học lập trình cùng Coddy

Bắt đầu