十六进制转二进制换算器
结果
二进制
- 每四位一组
- 0010 1010 0011 1111
十六进制转二进制换算器把一个十六进制数改写成二进制,而在本站所有的换算里,它是唯一一个完全不需要算术的。一个十六进制位恰好是四个二进制位——这不是某个数的巧合,而是十六进制存在的理由——所以逐位替换即可,位与位之间没有任何进位。2 换成 0010、A 换成 1010、3 换成 0011、F 换成 1111,于是 2A3F 就是 10101000111111。替换表一共十六行,再也不会变长:0 是 0000、1 是 0001,二进制一路数上去到 F,也就是 1111。无论在哪一位上,一个字符都值四个二进制位,这与十进制不同——十进制的数字位值多少要看它坐在哪。有一个细节容易绊人。答案的数字位印了两遍,一遍是连着的整串,一遍切成四位一组,而分组那一行更长,因为它的第一组被补零补满了。2A3F 是十四位,分组写法因此是 0010 1010 0011 1111——十六个字符,前面加了三个零。那些零不改变数值,它们存在是为了让第二组与第三组之间的边界看得见,而不用自己数出来。小写输入也收,并且会被规范:2a3f 与 2A3F 是同一个数,答案是同一串。这一点很重要,因为网上遇到的十六进制串——颜色值、哈希、各种标识符——多数是小写的。
把 2A3F 的每一个字符展开成四个二进制位
| 十六进制位 | 四位组 | 十进制 |
|---|---|---|
| 2 | 0010 | 2 |
| A | 1010 | 10 |
| 3 | 0011 | 3 |
| F | 1111 | 15 |
四行,一个字符一行,整套方法就这些——没有第五行可以加,也没有进位要解释。第三列是把字符当数看的数值,也就是第二列那四位加起来的结果:A 是十,因为 1010 是 8 + 2;F 是十五,因为 1111 是 8 + 4 + 2 + 1。把第二列从上往下接起来就是二进制答案,而读第三列就是题目改问十进制时该做的事。要看补零规则就看第一行:2 是 0010,前面那个零是这个数本身不需要的,它在那里只是为了和另外三行一样宽。表固定用 2A3F,而上面的面板换算你输入的那个数。
公式
2A3F ⇒ 2 → 0010、A → 1010、3 → 0011、F → 1111 ⇒ 10101000111111,分组写作 0010 1010 0011 1111
- 2A3F
- 要换算的那个十六进制数。字母不分大小写,2a3f 与 2A3F 是同一个值;而答案一律印成大写,这是本站二进制与十六进制记法的约定
- 一个字符
- 这道换算的处理单位。每个字符单独处理,彼此之间不传递任何东西——这正是它能从左往右、甚至随便挑着做、并且不需要记住任何累计值的原因
- 4 位
- 每个字符展开成的二进制位数,没有例外。十六种可能的字符与十六种可能的四位组合,这就是两种进制能对上的全部原因;它也意味着二进制答案的长度永远恰好是字符数的四倍
- 0000 — 1111
- 一个字符能产生的全部组合,也就是二进制从 0 数到 15。这就是替换表本身:0 是 0000、1 是 0001,一路数到 9 是 1001,A 到 F 则是 1010 到 1111
- ⇒ 10101000111111
- 把各位直接接起来的整串。这是这个数自己的二进制写法,它不补零:前导零会被去掉,所以最高几位是零的值印出来比「字符数乘四」短
- 0010 1010 0011 1111
- 同一串数字位按四位切开的结果,而这一行是补过零的——第一组是 0010 而不是 10,前面加了三个零,好让每一组都是四个字符宽、边界与十六进制字符对齐
- 2⁵³ − 1
- 输入的上界,而它在这里以一副陌生的样子出现:十四位十六进制,也就是 1FFFFFFFFFFFFF,也就是五十三个二进制位,也就是十进制里的 9007199254740991。更长的输入会被拒收,而不是照换不误
十六进制是人写下来的、二进制是机器执行的,所以任何贴近硬件工作的人每天都要在两者之间走一趟。像 2A3F 这样的颜色码是四个十六进制字符,而看清它哪几位是 1——掩码、权限标志、寄存器设置问的正是这件事——就要把它看成二进制。哈希、校验和、位标志也是同样的读法,调试器里的地址、抓包里的标志位也一样。反方向同样值得做,这也是它单独成页的原因:二进制超过几位就没法读,所以用二进制找到的值通常要先写成十六进制再往下传。课程里的题目通常写作把十六进制转成二进制,而这题的工作量除了一张替换表以外没什么可写的——不过补零值得写出来,因为 10101000111111 与 0010 1010 0011 1111 是同一个数、可见结构却不同,要哪一个取决于读者需要的是数值还是字节布局。
算例
换算 2A3F
- 一位一位地取:2、A、3、F
- 逐个换成四位:2 是 0010、A 是 1010、3 是 0011、F 是 1111
- 四组直接接起来,中间不加任何东西:10101000111111
- 把同一串数字位按四位切开,并给第一组补零:0010 1010 0011 1111
默认值,也是展示补零的一条。两行输出的长度不一样——十四位对十六个字符(含三个空格)——这是预期的:第一行是数值,第二行是把字符边界显出来的同一个数值。还要注意 A 与 F 是被替换的,不是被换算的:这些步骤里没有一步是算术。
一个字节,B2
- B 是 11,四位写作 1011
- 2 四位写作 0010
- 接起来:10110010——八位、两组、一个字节
两个十六进制字符永远是八位,也就是一个字节,这正是这一对对子值得记住的原因:一个值有多宽不用数就能读出来。这里的组边界恰好也落在字节上,不过那是「两个字符」这件事的性质,不是这个特定值的性质。
小写输入,2a3f
- 小写 a 与大写 A 一样,都是十一
- 小写 f 与大写 F 一样,都是十五
- 换算过程与 2A3F 完全相同,结果也一样
两个输出都与第一条例子逐字相同。从网页、样式表或日志里复制来的十六进制串通常是小写的,所以两种大小写都收不是顺手为之——拒收小写等于恰好在人们真正会拿来的输入上不可用。
最大的输入,1FFFFFFFFFFFFF
- 十四个字符,第一组补零之后答案是五十六位
- 开头那个 1 在四位一组里写作 0001,补零就出现在这里
- 十三个 F 每个都是 1111,所以补零后的答案是三个零后面跟五十三个 1
- 不补零的话,这个数本身就是五十三个 1
上界这一格,也是补零规则最清楚的一例:第一组是 0001 而不是 1,所以分组那一行比整串那一行多了三个前导零。同一个上界在十进制那几页写作 9007199254740991、在读取页写作五十三位——它是同一个界的三种写法。
局限
这一页只换算整数,而输入是十六进制串而不是十进制数,所以没有小数点可拒收:0 到 9 与 A 到 F 之外的字符会被拒收。输入最长十四位十六进制,也就是 1FFFFFFFFFFFFF,更长的串会被带着说明拒收,而不是截断——截断出来的东西看起来会像一个答案。前导零会被收下且不改变数值;前导负号也收,此时补零作用在数字位之前、符号最后才接上去,所以分组那一行读作负号后跟 0010,而不是把负号夹在中间。答案一律印成大写,与输入怎么写的无关。下面那张表展开的是默认值 2A3F,不跟着你输入的数变。反过来的方向,也就是把二进制读回十六进制,是另一页的事,这一页不对结果做任何运算。
常见问题
- 为什么一个十六进制位总是四个二进制位?
- 因为四与十六都是 2 的幂,而十六等于四个二相乘。四个二进制位一共有二的四方、也就是十六种排列——正好是十六进制能提供的字符数。于是两个集合严丝合缝地对上:每个字符对应一种四位组合,每种四位组合对应一个字符,两边都不剩。十六进制被用而不是比如十进制,原因就在这里:十进制除不尽二进制位。
- 为什么分组那一行比整串那一行长?
- 因为分组那一行补了零,整串那一行没补。整串那一行是这个数自己的二进制写法,所以去掉前导零;分组那一行必须是整数个四位组,所以把最上面那一组补满。对 2A3F 来说就是前面多三个零——一行十四位,另一行十六个字符。两者都不错,是同一个值。要数值就用第一行,要看字符落在哪里就用第二行。
- 怎么手算十六进制转二进制?
- 把每个字符换成它的四位、接起来,从左往右做即可。十个数字的四位就是二进制数数:0 是 0000、1 是 0001、2 是 0010,到 9 是 1001;再往下 A 是 1010、B 是 1011、C 是 1100、D 是 1101、E 是 1110、F 是 1111。没有进位可带,也没有累计值要记,所以字符挑着做、顺序打乱都不影响结果。
- 字母写大写还是小写有影响吗?
- 没有。2a3f 与 2A3F 是同一个数,都换成 10101000111111。答案一律印成大写,这是技术写作里两种进制的通行约定。之所以要收小写输入,是因为人们复制到的十六进制串——样式表里的颜色值、哈希、日志里的标识符——大多是小写的。
- 这一页最大能换算多大的十六进制数?
- 十四位字符:上界是 1FFFFFFFFFFFFF,换算结果是五十三个 1。更长的串会被带着说明拒收而不是截短,而这个上限不是这一页特有的——同一个界在十进制那几页写作 9007199254740991,在读取页写作五十三位。更宽的值机器已经分不开相邻的两个整数,超过它的答案不可信。
- 十六进制转二进制与十六进制转十进制是一回事吗?
- 不是,虽然两者都从同一个串出发,容易混。转二进制是替换:每个字符变成四个位,全程没有算术。转十进制是求和:每个字符乘以它所在位值的十六的幂——2A3F 是 2×4096 + 10×256 + 3×16 + 15——再把各项加起来。二进制那一页之所以更快,是因为底是 2 的幂,而十进制那一页不是。
参考资料
- Hexadecimal——十六进制、A 到 F 这六个字母,以及一个十六进制位为什么恰好是四个二进制位 — Wolfram MathWorld(美国)
- Binary number——二进制的位置记法、位值,以及四位的组从高到低数过的那些 2 的幂 — Wolfram MathWorld(美国)
- Powers of two——1、2、4、8…这个序列,四位的组正好从高到低跨过其中四项,OEIS 编号 A000079 — OEIS Foundation Inc.(美国)
- 教育部关于印发义务教育课程方案和课程标准(2022 年版)的通知——该通知的附件清单第 5 项是《义务教育数学课程标准(2022 年版)》;进位制与不同进制之间的换算是该课标数与代数领域的内容,原文与学段要求以该附件为准 — 中华人民共和国教育部