← 返回工具箱
🔣 进制转换

输入任意进制数值,实时查看其他进制

请输入有效的二进制数(仅含0和1)
请输入有效的八进制数(0-7)
请输入有效的十进制数
请输入有效的十六进制数(0-9, A-F)

📖 数制系统完全指南

什么是数制(进位计数制)?

数制,也称为进位计数制或基数系统(Radix System),是人类用来表示数量的符号体系。一个数制由两个核心要素决定:基数(Radix/Base)和位权(Positional Weight)。基数决定了该数制使用多少个不同的数字符号,而位权则决定了每个位置上的数字所代表的实际大小。

我们日常使用的十进制之所以使用10个符号(0-9),是因为人类有10根手指,这是最自然的计数方式。然而在计算机科学中,由于电子元件只有"通电"和"断电"两种状态,二进制(仅使用0和1两个符号)才是计算机的"母语"。八进制和十六进制则是二进制的便捷缩写形式,广泛用于编程和系统管理。

位值原理(位权展开)

所有进位计数制都遵循相同的位值原理:一个数的值等于各个位上的数字乘以该位对应的权值之和。这就是"按权展开求和"法。

位值原理通用公式:
N = d(n-1) × B^(n-1) + d(n-2) × B^(n-2) + ... + d(1) × B^1 + d(0) × B^0

其中 B = 基数(Base),d(i) = 第i位上的数字,n = 总位数

示例一:十进制 255 的含义
255 = 2×10^2 + 5×10^1 + 5×10^0 = 200 + 50 + 5 = 255

示例二:二进制 11111111 转十进制
1×2^7 + 1×2^6 + 1×2^5 + 1×2^4 + 1×2^3 + 1×2^2 + 1×2^1 + 1×2^0
= 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255

示例三:十六进制 FF 转十进制
F×16^1 + F×16^0 = 15×16 + 15×1 = 240 + 15 = 255

0-15在四种常用进制中的完整对照表

十进制二进制八进制十六进制
0000000
1000111
2001022
3001133
4010044
5010155
6011066
7011177
81000108
91001119
10101012A
11101113B
12110014C
13110115D
14111016E
15111117F

十进制转其他进制:短除法详解

将十进制整数转换为N进制,最经典的方法是"短除法"(也叫"除N取余法"):不断将数除以目标基数N,记录每次的余数,直到商为0,然后将余数从下往上排列即为结果。

完整示例:十进制 255 转二进制
255 ÷ 2 = 127 ... 余 1
127 ÷ 2 = 63  ... 余 1
63  ÷ 2 = 31  ... 余 1
31  ÷ 2 = 15  ... 余 1
15  ÷ 2 = 7   ... 余 1
7   ÷ 2 = 3   ... 余 1
3   ÷ 2 = 1   ... 余 1
1   ÷ 2 = 0   ... 余 1
从下往上读余数:11111111

完整示例:十进制 255 转十六进制
255 ÷ 16 = 15 ... 余 15 (F)
15  ÷ 16 = 0  ... 余 15 (F)
从下往上读余数:FF

验证:0xFF = 15×16 + 15 = 255 ✓

为什么计算机使用二进制?

计算机使用二进制并非偶然的设计选择,而是由硬件物理特性决定的。电子电路中,晶体管只有两种稳定状态——导通(高电平,代表1)和截止(低电平,代表0)。使用二进制可以最大限度地提高信号的抗干扰能力:即使电压出现一定波动,也能清晰地区分0和1两种状态。如果使用十进制,就需要精确区分10个不同的电压等级,这在工程上极其困难且容易出错。

此外,布尔代数(Boolean Algebra)天然适用于二进制运算,所有逻辑运算(AND、OR、NOT、XOR)都可以用简单的电路门实现,这使得CPU的算术逻辑单元(ALU)设计变得高效而可靠。

十六进制的实际应用

十六进制是程序员最常用的进制之一,因为它与二进制有天然的简洁对应关系:每1个十六进制数字恰好对应4个二进制位(bit),每2个十六进制数字恰好表示1个字节(byte)。

应用领域十六进制示例含义说明
CSS/HTML颜色#FF0000红色,R=255, G=0, B=0
CSS/HTML颜色#336699R=51, G=102, B=153,一种蓝灰色
内存地址0x7FFF5FBFF8AC64位系统中的栈地址
MAC地址AA:BB:CC:DD:EE:FF网卡硬件地址,6个字节
Unicode字符U+4E2D"中"字的Unicode码点
IPv6地址2001:0db8::0001128位IP地址的十六进制表示
字节序列0xDEADBEEF程序员常用的调试标记值

八进制与Unix文件权限

八进制在现代编程中最常见的用途是表示Unix/Linux文件权限。每个文件有三组权限(所有者、所属组、其他用户),每组权限由读(r=4)、写(w=2)、执行(x=1)三个位组成。由于每组权限恰好用3个二进制位表示,而1个八进制数字也是3位,因此八进制是表示文件权限的最自然方式。

八进制数字二进制权限含义符号表示
0000无权限---
1001仅执行--x
2010仅写入-w-
4100仅读取r--
5101读取+执行r-x
6110读取+写入rw-
7111读+写+执行rwx

例如 chmod 755 表示:所有者拥有全部权限(7=rwx)、所属组拥有读和执行权限(5=r-x)、其他用户拥有读和执行权限(5=r-x)。

编程语言中的进制前缀

进制前缀写法代码示例支持的语言
二进制0b 或 0B0b11111111 = 255C/C++、Java、Python、JavaScript
八进制0o 或 0O(旧式:0)0o377 = 255Python 3、JavaScript(ES6)、Go
十六进制0x 或 0X0xFF = 255几乎所有编程语言
💡 避免常见错误:(1)八进制前缀问题:在JavaScript和C中,以数字0开头的数字字面量会被当作八进制解析(如 010 = 8 而非 10),这是非常容易踩的坑,建议使用0o前缀明确表示八进制。(2)十六进制大小写:十六进制字母A-F不区分大小写,0xFF和0xff完全等价。(3)进制间快速转换技巧:十六进制和二进制可以按位直接转换(1个十六进制位 = 4个二进制位),例如 0xA3 = 1010 0011,0xFF = 1111 1111。八进制和二进制同理(1个八进制位 = 3个二进制位),例如 0o377 = 011 111 111。掌握这些对应关系可以大幅提升调试效率。