进制转换器,免费

在二进制、八进制、十进制和十六进制之间转换。

您的数据不会离开您的设备
二进制(基数 2)
八进制(基数 8)
十进制(基数 10)
十六进制(基数 16)

理解数字进制

数字进制(或基数)决定了用多少个独特的数字来表示数字。最熟悉的是十进制(基数 10),使用数字 0–9。计算机原生使用二进制(基数 2),只有 0 和 1。

常见问题

支持非常大的数字吗?

支持。此工具使用 JavaScript 的 BigInt,可在无精度损失的情况下处理任意大的整数。您可以转换几百位的数字。

为什么二进制在计算机中如此重要?

计算机使用两种状态的电信号(开/关),这自然对应于二进制(1/0)。所有数据 · 文本、图片、视频 · 最终都以二进制存储和处理。

位置记数法的原理

位置记数法使用一组固定的数字符号来表示数字,每个数字的位置决定其权重。位置 i(从右侧从零开始计数)的权重为 base^i。数字的值是所有位置上 digit × base^i 的总和。十进制中的字符串 352 表示 3×100 + 5×10 + 2×1 = 352。二进制中的字符串 1011 表示十进制的 1×8 + 0×4 + 1×2 + 1×1 = 11

位置记数法是数字表示的两大发明之一。另一种是非位置制(罗马数字、埃及僧侣体),其中符号无论位置如何都有固定的值。位置制可以压缩;非位置制不能,数字1,888在十进制中只需四位,但用罗马数字写成MDCCCLXXXVIII需要八个字符。

进制的简史

巴比伦人至少在古巴比伦时期(约公元前1900-1600年)就使用六十进制(base-60)位置记数法。那个时代的楔形文字泥板已经使用位置记数法。为什么是60?它拥有异常多的小因数(1、2、3、4、5、6、10、12、15、20、30、60),这使得在小数分数出现之前的世界里分数运算更加便捷。巴比伦的遗产至今仍在您的生活中:时间(60秒一分钟,60分钟一小时)以及角度/地理坐标(圆周360度,每度60分,每分60秒)都是直接的遗存。当您看时钟或读经纬度时,您就在使用六十进制。

我们今天所知的十进制位置系统由印度数学家在公元最初几个世纪发展而来。使其有别于早期计数板的概念性飞跃是用于占位的零的书写符号。零在位置记数法语境中最早无歧义的使用一般归功于婆罗摩笈多(628年),其著作Brāhmasphuṭasiddhānta给出了零参与运算的规则。巴赫沙利手稿显示了更早使用点(bindu)作为占位符的情形。

十进制系统在8至9世纪从印度传入伊斯兰世界,波斯博学家花拉子密(al-Khwārizmī)约于825年写成《印度数字计算法》(「algorithm」和「algebra」这两个词在词源上分别源于他的名字和著作名)。欧洲落后了。比萨的列奥纳多,即斐波那契《计算之书》(Liber Abaci)(1202年)中正式将印度-阿拉伯数字引入拉丁欧洲,展示了其相较于罗马数字的优越性。罗马数字在欧洲簿记中一直延续到16世纪。

戈特弗里德·威廉·莱布尼茨在1703年的论文《二进制算术阐释》中描述了一个完整的二进制数系统,但其主要动机是哲学性的(与《易经》的对应关系),而非实用性的。将二进制运用于计算的飞跃来自克劳德·香农1937年在麻省理工的硕士论文「A Symbolic Analysis of Relay and Switching Circuits」,该文证明了布尔代数可以模拟电气继电器网络,使二进制成为数字逻辑的自然语言。

转换算法

十进制转其他进制,反复除法。将十进制整数N转换为 b 进制:用N除以 b,记录余数,用商替换N,重复直至商为0。从下到上读余数即为 b 进制的各位数字。156转二进制的示例: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,从下到上读余数:10011100。验证:128 + 16 + 8 + 4 = 156。

其他进制转十进制,霍纳法。从0开始;从左到右逐位遍历,将当前总和乘以进制基数后加上新数字。十六进制 1F4 的示例:0×16 + 1 = 1,然后1×16 + 15 = 31,然后31×16 + 4 = 500。

两种算法相对于数字位数均以线性时间运行,JavaScript的 BigInt 在底层实现了它们,这就是为什么本工具没有精度上限。一个200位的数字可以在任意两个进制之间无损转换,就像具有任意精度整数运算能力的计算器一样。

计算中最重要的四种进制

值得记忆的2的幂次

次幂十进制十六进制为何重要
2⁸2560x1001字节;8位通道(RGB)的最大值
2¹⁰1,0240x400「1K」在计算领域的含义
2¹⁶65,5360x10000UTF-16 BMP大小;16位整数最大值
2²⁰1,048,5760x100000「1M」在计算领域的含义
2²⁴16,777,2160x100000024位RGB(「16.7M色」)
2³²约43亿0x10000000032位无符号整数最大值;IPv4地址空间
2⁶⁴~1.8×10¹⁹0x100…64位整数最大值;远超浮点精度范围

何时需要进制转换器

其他值得了解的进制

源代码前缀约定

大多数现代编程语言使用同一套字面量前缀来区分源码中的进制:

更多问题

负数怎么处理?

计算机使用二进制补码表示负整数:将所有位取反后加1。因此,在8位二进制补码中,−1是 11111111(0xFF),−5是 11111011(0xFB),−128是 10000000(0x80)。最高有效位表示符号。本工具以前导负号而非二进制补码形式显示负整数,因为后者只在固定位宽下才有意义,而由于本工具使用任意精度的 BigInt,没有可以参照的固定位宽。

十六进制为何使用字母A-F?

因为16进制需要16个不同的数字符号,而十进制数字0-9只提供了十个。使用A-F(不区分大小写)表示10-15的惯例由IBM System/360在1960年代推广并在行业内标准化。早期系统曾尝试其他符号(Bendix G-15使用u、v、w、x、y、z),但A-F获胜。

本工具能处理分数吗?

不能,仅限整数。分数进制转换更为复杂,因为大多数十进制分数在二进制中没有精确表示(著名的 0.1 + 0.2 ≠ 0.3 浮点问题)。要进行浮点数位级检查,应使用专用的IEEE 754可视化工具。

有任何内容会发送至服务器吗?

不会。转换在您的浏览器中使用JavaScript原生的 BigInt 运算执行。您的输入内容不会离开页面;页面加载后即可离线使用。

相关工具