无需登录 数据私有 本地保存

进制转换器 - 2/8/10/16进制及自定义进制

42
0
0
0

🔢 进制转换器

支持 2~36 任意进制互转 · 实时转换 · 一键复制

允许字符:0-9
二进制 (Base 2) --
八进制 (Base 8) --
十进制 (Base 10) --
十六进制 (Base 16) --
自定义目标进制
Base
--
Base
--
已复制到剪贴板

常见问题与知识点

进制(Numeral System / Radix)是一种计数方式,也称为进位制。它定义了使用多少个不同的数字符号来表示数值。日常生活中最常用的是十进制(Base 10),使用0-9共10个符号。

常见进制包括:

  • 二进制(Base 2):使用0和1,是计算机底层的基础
  • 八进制(Base 8):使用0-7,常用于Unix文件权限
  • 十进制(Base 10):使用0-9,人类最常用的计数方式
  • 十六进制(Base 16):使用0-9和A-F,广泛用于颜色值、内存地址等

  • 二进制:计算机CPU指令、逻辑电路、数据传输、位运算、子网掩码等。所有数字设备底层都使用二进制。
  • 八进制:Linux/Unix文件权限系统(如chmod 755)、某些嵌入式系统、早期计算机架构。
  • 十六进制:网页颜色代码(如#FF5733)、内存地址、Unicode编码、MAC地址、IPv6地址、调试器中的内存转储、汇编语言等。十六进制比二进制更紧凑,且与二进制的转换非常直观(1位十六进制=4位二进制)。

进制转换的核心思想是:任意进制 → 十进制(按权展开求和)→ 目标进制(除基取余)

任意进制转十进制:将每一位数字乘以基数的对应次幂,然后求和。例如二进制 1011₂ = 1×2³ + 0×2² + 1×2¹ + 1×2⁰ = 8+0+2+1 = 11₁₀。

十进制转任意进制:不断除以目标基数,记录余数,直到商为0,然后将余数逆序排列。例如11₁₀转二进制:11÷2=5余1,5÷2=2余1,2÷2=1余0,1÷2=0余1 → 余数逆序为1011₂。

对于超过10的进制,余数10-35分别用字母A-Z表示。

进制范围限制在2到36之间,是因为我们通常使用0-9(10个数字)和A-Z(26个字母)作为表示符号,总共36个字符。

  • 进制2:只需要0和1两个符号,是最小的可行进制。
  • 进制36:使用全部0-9和A-Z共36个符号,是使用标准拉丁字母表能表示的最大进制。
  • 理论上进制可以大于36,但需要引入更多符号(如小写字母、特殊符号等),这会变得不直观且容易混淆。

这也是为什么JavaScript的parseInt()toString()方法都将进制参数限制在2-36范围内。

在JavaScript中,进制转换非常简单:

// 任意进制字符串 → 十进制数字
const decimal = parseInt('1A3F', 16);  // 6719

// 十进制数字 → 任意进制字符串
const binary = (255).toString(2);   // '11111111'
const octal = (255).toString(8);    // '377'
const hex = (255).toString(16);     // 'ff'
const base36 = (123456).toString(36); // '2n9c'

// 任意进制 → 任意进制(通过十进制中转)
const result = parseInt('1010', 2).toString(16); // 'a'

其他语言也有类似的内置函数,如Python的int('1010', 2)bin()oct()hex()等。

  • 输入非法字符:在二进制中输入2-9,在八进制中输入8-9,在十进制中输入字母等。本工具会实时验证并提示。
  • 混淆大小写:十六进制中A-F和a-f等价,但输出时建议统一使用大写以避免混淆(如1a3f1A3F是同一个值)。
  • 前导零误解:前导零不影响数值(如00101₂=101₂=5₁₀),但在某些编程语境中有特殊含义。
  • 数值溢出:JavaScript中安全整数范围为±2⁵³−1(约±9千万亿),超出此范围的整数可能丢失精度。处理超大数建议使用BigInt。
  • 进制混淆:不同编程语言对进制前缀有不同约定(如0x表示十六进制、0b表示二进制、0o表示八进制),转换时需注意。

在十六进制(以及所有超过10的进制)中:

字母数值字母数值
A10B11
C12D13
E14F15

对于超过16的进制,继续按字母顺序延伸:G=16, H=17, ..., Z=35(用于最大36进制)。

十六进制在计算机领域广泛使用,主要有以下原因:

  • 与二进制的完美映射:1位十六进制恰好等于4位二进制(2⁴=16),转换非常直观。例如0xF=1111₂0xA3=1010 0011₂
  • 紧凑易读:一个8位二进制数(如11010110)用十六进制只需2位(D6),大大提高了可读性。
  • 调试友好:内存地址、寄存器值、网络数据包等底层数据通常以十六进制展示,便于开发者快速识别模式。
  • 标准化:Unicode码点(如U+4E2D)、RGB颜色(如#FF8800)等标准都采用十六进制表示。