Bộ chuyển đổi nhị phân sang bát phân

Nhị phân

Bát phân vẫn còn sống trong quyền tệp Unix (chmod 755), tài liệu thời PDP cũ và một số bộ công cụ vi điều khiển. Công cụ này nhận bất kỳ chuỗi nhị phân nào, gom các bit ba cái một từ bên phải và ánh xạ mỗi nhóm thành một chữ số cơ số 8 từ 0 đến 7 — kèm tùy chọn thêm số 0 ở đầu cho các ngôn ngữ xem 0755 là hằng bát phân.

Cách chuyển nhị phân sang bát phân

  1. 1

    Nhập giá trị nhị phân

    Dấu cách bị loại bỏ. Độ dài nào cũng được; nhóm ngoài cùng bên trái tự động được thêm số 0 ở đầu cho đủ ba bit.

  2. 2

    Gom bit thành nhóm ba từ bên phải

    `111101100` trở thành `111 101 100`. Hướng gom rất quan trọng — luôn từ phải sang trái.

  3. 3

    Ánh xạ từng nhóm ba bit

    000 = 0, 001 = 1, 010 = 2, tới 111 = 7. Mỗi nhóm ba bit ánh xạ đúng một chữ số bát phân.

  4. 4

    Đọc và sao chép kết quả

    Chọn chữ số thô (`754`), dạng thêm số 0 ở đầu (`0754`) hoặc dạng có `0o` ở đầu (`0o754`) để tương thích Python 3 và Rust.

Bảng ánh xạ nhóm ba bit sang bát phân

Nhị phân Bát phân
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7

Ví dụ: quyền Unix

rwxr-xr-x nghĩa là chủ sở hữu có quyền đọc/ghi/thực thi, còn nhóm và những người khác có quyền đọc/thực thi. Dạng nhị phân là 111 101 101, gom trực tiếp thành bát phân 755 — đúng số bạn truyền cho chmod.

Khi nào bát phân hữu ích

  • Quyền tệp: chmod 644, umask 022, stat -c %a đều nói bằng bát phân.
  • Chuỗi escape: \100 trong C là bát phân cho @ (64 thập phân).
  • Mã máy cũ: tài liệu PDP-8, PDP-11 và DEC đời đầu liệt kê mã lệnh bằng bát phân vì kích thước word của chúng là bội số của 3 bit.
  • Đọc trực quan: nhóm ba bit dễ đọc nhanh hơn nhị phân mà không cần đầy đủ bảng chữ cái của thập lục phân.

Lưu ý dễ sai

  • Số 0 ở đầu nghĩa là bát phân trong C: 0755 là bát phân 755 (= thập phân 493), 755 là thập phân 755. Hãy kiểm tra ngôn ngữ của bạn trước khi dán.
  • JavaScript đã bỏ bát phân kiểu cũ: chế độ strict từ chối 0755. Dùng 0o755 thay thế.
  • Hướng gom nhóm: nếu bạn gom từ trái sang phải, kết quả sẽ sai với mọi chuỗi bit có độ dài không phải bội số của 3.

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

Vì các cờ quyền nằm thành nhóm ba rất gọn (đọc, ghi, thực thi) cho từng vai trò (chủ sở hữu, nhóm, người khác). Mỗi nhóm ba bit ánh xạ 1-1 sang một chữ số bát phân, nên rwxr-xr-x đọc thành 755 trong một bước.

Với C, Perl và shell, dùng số 0 ở đầu. Với Python 3, Rust và Swift, dùng 0o. Với chmod trên dòng lệnh, không thêm gì ở đầu.

Số âm cần một độ rộng bit có dấu (bù hai). Hãy chỉ định độ rộng trước; nếu không công cụ sẽ xem mọi đầu vào là không dấu.

Không. Công cụ sẽ thêm số 0 ở đầu cho nhóm ngoài cùng bên trái đến đủ ba bit. 1111 trở thành 001 111, tức bát phân 17.

Công cụ liên quan