Trình Chuyển Đổi Cơ Số Số
Chuyển đổi giữa nhị phân, bát phân, thập phân và thập lục phân.
Hiểu các hệ cơ số
Một cơ số (hoặc radix) xác định bao nhiêu chữ số duy nhất được dùng để biểu diễn các số. Quen thuộc nhất là cơ số 10 (thập phân), sử dụng các chữ số 0-9. Máy tính sử dụng nguyên thủy cơ số 2 (nhị phân), chỉ với 0 và 1.
- Nhị phân (cơ số 2): được sử dụng nội bộ bởi tất cả các hệ thống số. Mỗi chữ số là một « bit ».
- Bát phân (cơ số 8): sử dụng các chữ số 0-7. Phổ biến cho quyền tệp Unix (ví dụ chmod 755).
- Thập phân (cơ số 10): hệ thống số tiêu chuẩn của con người.
- Thập lục phân (cơ số 16): sử dụng 0-9 và A-F. Được dùng rộng rãi cho màu sắc (#FF0000), địa chỉ bộ nhớ và biểu diễn byte.
Câu hỏi thường gặp
Nó có hỗ trợ các số rất lớn không?
Có. Công cụ này sử dụng BigInt của JavaScript, hỗ trợ các số nguyên lớn tùy ý mà không mất độ chính xác. Bạn có thể chuyển đổi các số hàng trăm chữ số.
Tại sao nhị phân quan trọng trong tin học?
Máy tính sử dụng tín hiệu điện hai trạng thái (bật/tắt), tương ứng tự nhiên với nhị phân (1/0). Mọi dữ liệu · văn bản, hình ảnh, video · cuối cùng được lưu trữ và xử lý ở dạng nhị phân.
Cách hoạt động của ký hiệu số vị trí
Hệ số vị trí biểu diễn một số bằng tập hợp ký hiệu chữ số có kích thước cố định, trong đó vị trí của mỗi chữ số quyết định trọng số của nó. Trọng số của vị trí i (đếm từ phải, bắt đầu từ không) là base^i. Giá trị của số là tổng digit × base^i trên tất cả các vị trí. Chuỗi 352 trong cơ số 10 có nghĩa là 3×100 + 5×10 + 2×1 = 352. Chuỗi 1011 trong cơ số 2 có nghĩa là 1×8 + 0×4 + 1×2 + 1×1 = 11 trong hệ thập phân.
Ký hiệu vị trí là một trong hai phát minh lớn về biểu diễn số. Loại kia là không vị trí (chữ số La Mã, chữ hieratic Ai Cập), trong đó các ký hiệu có giá trị cố định bất kể vị trí. Hệ vị trí có tính nén; hệ không vị trí thì không, số 1.888 cần bốn chữ số trong hệ thập phân nhưng tám ký tự trong La Mã: MDCCCLXXXVIII.
Lịch sử ngắn về các cơ số
Người Babylon đã dùng hệ số cơ số 60 (sexagesimal) ít nhất từ thời kỳ Old Babylonian, khoảng năm 1900-1600 TCN. Các bảng cuneiform từ thời đó đã sử dụng ký hiệu vị trí. Tại sao 60? Nó có số lượng ước số nhỏ đặc biệt cao (1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30, 60), giúp tính toán phân số dễ hơn trong thế giới trước khi có phân số thập phân. Di sản Babylon vẫn còn trong túi bạn: thời gian (60 giây trong một phút, 60 phút trong một giờ) và góc / tọa độ địa lý (360 độ trong một vòng tròn, 60 phút cung trên một độ, 60 giây cung trên một phút) là con cháu trực tiếp. Khi bạn đọc đồng hồ hay vĩ độ, bạn đang đọc sexagesimal.
Hệ thập phân vị trí như chúng ta biết được phát triển bởi các nhà toán học Ấn Độ vào những thế kỷ đầu sau Công nguyên. Bước nhảy vọt về khái niệm phân biệt nó với các bàn tính trước đây là một ký hiệu viết cho số không đóng vai trò giữ chỗ. Việc sử dụng số không trong ngữ cảnh vị trí sớm nhất không thể nhầm lẫn thường được cho là của Brahmagupta (628 SCN), người có luận văn Brāhmasphuṭasiddhānta đã đưa ra các quy tắc số học với số không. Bản thảo Bakhshali cho thấy việc sử dụng chấm (bindu) làm giữ chỗ sớm hơn nữa.
Hệ thập phân du hành từ Ấn Độ đến thế giới Hồi giáo vào thế kỷ 8-9, nhà học giả Ba Tư al-Khwārizmī đã viết On the Calculation with Hindu Numerals vào khoảng năm 825 SCN («algorithm» và «algebra» là con cháu từ nguyên học trực tiếp của tên và tên sách của ông). Châu Âu tụt hậu. Leonardo of Pisa, còn được biết là Fibonacci, đã chính thức giới thiệu chữ số Hindu-Arabic vào Châu Âu Latin trong Liber Abaci (1202), chứng minh sự vượt trội của chúng so với chữ số La Mã. Chữ số La Mã vẫn tồn tại trong sổ sách kế toán Châu Âu đến thế kỷ 16.
Gottfried Wilhelm Leibniz đã mô tả hệ nhị phân đầy đủ trong bài báo năm 1703 Explication de l'arithmétique binaire: dù động lực chính của ông là triết học (thư từ với I Ching) hơn là thực tiễn. Bước nhảy vọt đến máy tính nhị phân đến với luận văn thạc sĩ năm 1937 của Claude Shannon tại MIT, «A Symbolic Analysis of Relay and Switching Circuits,» đã chứng minh đại số Boolean có thể mô hình hóa mạng lưới rơle điện, biến nhị phân thành ngôn ngữ tự nhiên của logic kỹ thuật số.
Các thuật toán chuyển đổi
Thập phân sang cơ số khác, chia liên tiếp. Để chuyển số nguyên thập phân N sang cơ số b, chia N cho b, ghi lại số dư, thay N bằng thương, và lặp lại cho đến khi thương bằng 0. Các số dư đọc từ dưới lên là các chữ số trong cơ số b. Ví dụ minh họa cho 156 sang nhị phân: 156÷2 = 78 r0, 78÷2 = 39 r0, 39÷2 = 19 r1, 19÷2 = 9 r1, 9÷2 = 4 r1, 4÷2 = 2 r0, 2÷2 = 1 r0, 1÷2 = 0 r1, đọc số dư từ dưới lên: 10011100. Kiểm tra: 128 + 16 + 8 + 4 = 156.
Cơ số khác sang thập phân, phương pháp Horner. Bắt đầu với 0; với mỗi chữ số từ trái sang phải, nhân tổng đang chạy với cơ số và cộng chữ số mới. Ví dụ minh họa cho hex 1F4: 0×16 + 1 = 1, rồi 1×16 + 15 = 31, rồi 31×16 + 4 = 500.
Cả hai thuật toán chạy trong thời gian tuyến tính so với số chữ số, và BigInt của JavaScript triển khai chúng bên dưới, đó là lý do tại sao công cụ này không có giới hạn độ chính xác. Một số 200 chữ số chuyển đổi sạch sẽ giữa bất kỳ hai cơ số nào mà không mất độ chính xác, giống như máy tính với số học nguyên độ chính xác tùy ý.
Bốn cơ số quan trọng trong máy tính
- Nhị phân (cơ số 2): transistor ở trạng thái bật hoặc tắt, vì vậy nhị phân là biểu diễn tự nhiên cho logic kỹ thuật số. Mọi dữ liệu, xét cho cùng, đều là nhị phân.
- Bát phân (cơ số 8): phổ biến trong lịch sử máy tính đầu tiên vì 3 bit nhị phân ánh xạ gọn gàng thành 1 chữ số bát phân. Ít nổi bật hơn ngày nay nhưng vẫn được dùng trong quyền truy cập file Unix (
chmod 755) và một số định dạng file cũ. - Thập phân (cơ số 10): hệ số con người dùng hàng ngày, hầu như chắc chắn vì chúng ta có mười ngón tay. Được dùng trong hệ thống tài chính, khoa học, mọi nơi con người đọc số.
- Thập lục phân (cơ số 16): chính xác 4 bit mỗi chữ số, nghĩa là 1 byte = 2 ký tự hex. Tiêu chuẩn thực tế cho biểu diễn cấp byte gọn gàng: mã màu hex (
#FF0000), địa chỉ bộ nhớ (0x7fff...), code point Unicode (U+1F600), địa chỉ MAC, giá trị hash.
Các lũy thừa của 2 đáng ghi nhớ
| Lũy thừa | Thập phân | Hex | Tại sao quan trọng |
|---|---|---|---|
| 2⁸ | 256 | 0x100 | Một byte; giá trị tối đa của kênh 8-bit (RGB) |
| 2¹⁰ | 1,024 | 0x400 | «1K» trong bối cảnh máy tính |
| 2¹⁶ | 65,536 | 0x10000 | Kích thước BMP UTF-16; max số nguyên 16-bit |
| 2²⁰ | 1,048,576 | 0x100000 | «1M» trong bối cảnh máy tính |
| 2²⁴ | 16,777,216 | 0x1000000 | RGB 24-bit («16,7M màu») |
| 2³² | ~4,3 tỷ | 0x100000000 | Max số nguyên không dấu 32-bit; không gian địa chỉ IPv4 |
| 2⁶⁴ | ~1.8×10¹⁹ | 0x100… | Max số nguyên 64-bit; vượt xa độ chính xác dấu phẩy động |
Khi nào bạn cần dùng công cụ chuyển đổi cơ số
- Đọc hex dump từ debugger, bắt gói mạng, hoặc file nhị phân. Dịch
0xFFsang 255 trong đầu thì được;0x7F4Athường thì không. - Mã màu CSS:
#FF0000là thập phân (255, 0, 0). Phép chuyển đổi hex sang RGB chính xác là cơ số 16 → cơ số 10 trên mỗi cặp hai ký tự. - Quyền file Unix:
chmod 755là bát phân: 7 = rwx (đọc+viết+thực thi = 4+2+1), 5 = r-x (đọc+thực thi = 4+1), 5 một lần nữa. Mỗi chữ số bát phân là chính xác 3 bit nhị phân. - Octet IPv4: địa chỉ như
192.168.1.1là bốn số 8-bit. Subnet mask dễ lý giải hơn trong nhị phân (mask/24là 24 bit một theo sau là 8 bit không). - Code point Unicode: các ký tự được lập danh mục bằng hex (U+2665 cho ♥, U+1F600 cho 😀). Giá trị thập phân tồn tại nhưng dạng hex khớp với bảng Unicode.
- Số học bitmask: cờ tính năng, bit quyền hạn, giá trị thanh ghi phần cứng đều dễ đọc hơn dưới dạng nhị phân hoặc hex hơn là thập phân.
- Debug mã assembly hoặc mã đã dịch ngược: địa chỉ, opcode và giá trị tức thì được viết theo quy ước bằng hex.
Các cơ số khác đáng biết
- Cơ số 36: cơ số cao nhất vừa với ký tự chữ và số mà không cần ký tự đặc biệt (10 chữ số + 26 chữ cái). Được dùng cho hash URL ngắn và một số sơ đồ mã hóa.
Number.toString(36)của JavaScript hiển thị nó trực tiếp. - Cơ số 58: được dùng trong địa chỉ Bitcoin và Ripple. Bỏ qua các ký tự dễ nhầm lẫn
0(số không),O(O hoa),I(I hoa) vàl(l thường) để địa chỉ không bị lỗi khi chép tay. - Cơ số 62: chữ và số đầy đủ (chữ số + chữ thường + chữ hoa). Phổ biến trong slug URL ngắn («abc123» trong
example.com/abc123). - Cơ số 64: mã hóa dữ liệu nhị phân thành ASCII có thể in để truyền qua các kênh chỉ có văn bản (email, JSON, URL). Phạm vi khác với công cụ này, nó hoạt động trên luồng byte thay vì số nguyên.
Quy ước tiền tố trong mã nguồn
Hầu hết các ngôn ngữ hiện đại dùng cùng tập tiền tố literal để phân biệt cơ số trong mã nguồn:
- Nhị phân:
0bhoặc0B(Python, Ruby, Java từ 7, C++ từ C++14, JavaScript từ ES6, Rust). Ví dụ:0b10011100. - Bát phân:
0ohoặc0O(Python 3, ES6, Rust). Ngôn ngữ họ C cũ dùng số không đứng đầu (0755), đôi khi là bẫy nguy hiểm nếu bạn vô tình thêm số không vào đầu số thập phân. - Hex:
0xhoặc0X: được hiểu phổ quát trong hầu hết mọi ngôn ngữ lập trình. - Thập phân: không cần tiền tố.
Câu Hỏi Thêm
Còn số âm thì sao?
Máy tính biểu diễn số nguyên âm bằng bù hai: đảo ngược tất cả các bit và cộng 1. Vì vậy trong bù hai 8-bit, −1 là 11111111 (0xFF), −5 là 11111011 (0xFB), và −128 là 10000000 (0x80). Bit có trọng số cao nhất biểu thị dấu. Công cụ này hiển thị số nguyên âm với dấu trừ đứng đầu thay vì biểu diễn bù hai, vì biểu diễn sau chỉ có nghĩa ở một chiều rộng bit cố định, và vì công cụ dùng BigInt độ chính xác tùy ý, không có chiều rộng cố định để diễn giải.
Tại sao hex dùng chữ cái A-F?
Vì cơ số 16 cần 16 ký hiệu chữ số riêng biệt trong khi các chữ số thập phân 0-9 chỉ cung cấp mười. Quy ước dùng A-F (không phân biệt hoa thường) cho 10-15 được phổ biến bởi IBM System/360 vào những năm 1960 và được chuẩn hóa trong toàn ngành. Các hệ thống trước thử nghiệm các ký tự khác (Bendix G-15 dùng u, v, w, x, y, z) nhưng A-F đã thắng.
Công cụ này có xử lý phân số không?
Không, chỉ dành cho số nguyên. Chuyển đổi cơ số cho phân số phức tạp hơn vì hầu hết phân số thập phân không có biểu diễn chính xác trong nhị phân (vấn đề dấu phẩy động nổi tiếng 0.1 + 0.2 ≠ 0.3). Để kiểm tra cấp bit dấu phẩy động, công cụ trực quan hóa IEEE 754 chuyên dụng là lựa chọn đúng.
Có gì được gửi đến máy chủ không?
Không. Các phép chuyển đổi chạy trong trình duyệt của bạn bằng số học BigInt gốc của JavaScript. Không có gì về dữ liệu đầu vào rời khỏi trang; công cụ hoạt động ngoại tuyến sau khi đã tải.