Pack Camo

进制转换器

二进制、八进制、十进制和十六进制,以及 2 到 36 的任意进制,支持大数。

所有处理都在本地完成,不会上传任何内容。

转换结果

16 位 · 13 个位为 1 · 5 位十进制数

  • 二进制 (2 进制)
    1011 1110 1110 1111
  • 八进制 (8 进制)
    137 357
  • 十进制 (10 进制)
    48 879
  • 十六进制 (16 进制)
    BEEF
  • 1 1PR

补码

每种位宽下的位模式,分别按有符号和无符号整数读取。点击十六进制值即可复制。

位宽十六进制模式有符号无符号
8 位无法放入 8 位。
16 位-1665748879
32 位4887948879
64 位4887948879
128 位4887948879

位

点击某一位即可翻转。

158
70

按有符号读取时,第 15 位是符号位。

二进制、八进制、十进制和十六进制——以及最高 36 的任意进制

用二进制、八进制、十进制、十六进制或 2 到 36 之间的任意进制输入一个数字,即可同时看到它在其他所有进制下的值。数字可以任意大——转换器使用任意精度整数,64 位或 128 位的值每一位都不会丢失——负数以 8、16、32、64 和 128 位补码显示,并配有位视图,点击即可翻转单个位。可识别 <code>0x</code> 等前缀和 <code>1_000_000</code> 等分隔符。一切都在你的浏览器中运行。

如何在不同进制之间转换

  1. 1选择你输入时使用的进制:Bin、Oct、Dec、Hex,或选择自定义使用 2 到 36 的任意进制。
  2. 2输入或粘贴数字。负号、0x、0b 和 0o 前缀,以及数字之间的空格、下划线或逗号都可以使用。
  3. 3同时查看所有进制下的结果,数字按组分隔便于阅读。在最后一行选择其他进制,或打开全部进制 2–36。
  4. 4查看补码表中每种位宽的有符号和无符号读数,在位视图中点击位来翻转,并复制你需要的形式。

位置记数法的原理

在任何进制中,每一位的权重是进制的“位置次方”,位置从右边的 0 开始计数。十进制的 255 是 2×10² + 5×10¹ + 5×10⁰。在二进制中同一个数是 11111111:八个 1,分别代表 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1。在十六进制中它是 FF:15×16 + 15。

大于 10 的进制需要超过十个数字符号,所以用字母继续计数:A 是 10,B 是 11,依此类推直到 Z 表示 35——这就是为什么 36 是使用普通数字和字母的最大进制。字母不区分大小写。

程序员为什么使用二进制、八进制和十六进制

二进制(基数 2)
机器存储一切的方式。适用于位标志、掩码和网络子网,但很长:一个 32 位值有 32 位数字。
十六进制(基数 16)
每个十六进制数字正好是四位,所以一个字节是两个十六进制数字,32 位值是八个。用于内存地址、颜色(#FF8800)、哈希、UUID 和字节转储。
八进制(基数 8)
每个八进制数字是三位。主要用于 Unix 文件权限,其中 755 是三组 rwx 位——请参阅 <a href="/chmod-calculator">chmod 计算器</a>。
36 进制和 62 进制
不区分大小写的紧凑标识符(如短链接和 ID)使用 36 进制(0–9 和 a–z)。62 进制加入了大写字母,不在本工具的范围内。

补码与负数

计算机以补码存储有符号整数:在固定的 n 位宽度下,负数 −x 存储为 2ⁿ − x。在 8 位下,−1 是 11111111(0xFF),−128 是 10000000(0x80),最高位同时充当符号位。8 位有符号整数的范围是 −128 到 127;同样的 8 位按无符号读取则是 0 到 255。

补码表显示每种常用位宽下的两种读数。输入 0xFFFFFFFF,你会看到它作为 32 位无符号整数是 4,294,967,295,作为有符号整数是 −1;输入 -42,即可得到它在每种位宽下的位模式。当某个值超出位宽时,该行会明确提示,而不是悄悄截断。

大数与精度

JavaScript 的普通数字在超过 2⁵³(9,007,199,254,740,992)后会丢失精度,这就是许多在线转换器处理 64 位 ID 和哈希时出错的原因。本转换器全程使用 BigInt,因此对任意大小的数字都精确——无论是 128 位值、按整数读取的 SHA-256 哈希,还是 20,000 位的数字。

只转换整数。小数在其他进制中很少能有限表示(十进制的 0.1 在二进制中是无限循环小数),因此浮点位模式和时间戳请使用 Unix 时间戳转换器。

常见问题

如何将二进制转换为十进制?
选择 Bin,输入二进制数,查看十进制那一行。手算时,把每个 1 对应的 2 的幂相加:1011 是 8 + 0 + 2 + 1 = 11。
如何将十进制转换为十六进制?
选择 Dec,输入数字,查看十六进制那一行。手算时,反复除以 16,然后把余数从最后一个到第一个写出:255 ÷ 16 = 15 余 15,所以 255 是 FF。
0x 前缀是什么意思?
0x 在 C、JavaScript、Python 和大多数其他语言中表示十六进制数,就像 0b 表示二进制、0o 表示八进制一样。转换器在输入中接受这些前缀,也可以在输出中添加。
负数是如何转换的?
在每种进制中,结果都保留负号,例如十六进制的 -2A。补码表和位视图显示同一个数在 8、16、32、64 或 128 位有符号整数中是如何存储的。
为什么 0xFF 同时显示为 255 和 -1?
同样的八位,按无符号字节读取是 255,按补码有符号字节读取是 -1。哪个正确取决于存储它的类型。
数字大小有限制吗?
实际上没有:最多 20,000 位的数字都能精确转换,因为转换器使用任意精度整数而不是浮点数。
可以转换分数或小数吗?
不可以,只能转换整数。大多数小数在其他进制中没有精确表示,所以转换器要求输入整数,而不是给出四舍五入的结果。
我的输入会被发送到任何地方吗?
不会。所有转换都在你的浏览器中完成。