十六进制转十进制换算器
结果
十进制
- 各位位值
- 2×4096 + 10×256 + 3×16 + 15
十六进制转十进制换算器把一个十六进制数改写成十进制,而与转二进制不同,这一页是真正的算术。一个十六进制数的值,等于每个字符乘以它所在位值的十六的幂、再把各项加起来,位数从最右边开始数、从零起算。2A3F 最右一位是 F,所以这一位值 15;往左一位的 3 值 3×16;再往左的 A 值 10×256;最前面的 2 值 2×4096。加起来是 10815。字母是出错的地方,而错法有两种。第一种是 A 必须先变成 10、F 必须先变成 15,然后才能相乘——把 A 读成 1 得到的答案看着像回事,但是错的。第二种是字母代表的数值要乘以它所在的位值,所以最后一位的 F 是 15,而往左挪一位的 F 是 240;字母不是「多少」,它是系数。另一半是十六的幂,而它有一个值得记住的形状:1、16、256、4096、65536 一路往上,每一项都是前一项的十六倍。把十六进制数从右往左对着这串数读,比现算幂更快。因为十六是 2 的幂,这串数也就是 2 的幂每四个取一个——16 是 2⁴、256 是 2⁸、65536 是 2¹⁶——这也解释了为什么每四位一组的位置正好对应一个十六的幂。页面上把整串加法印在答案旁边,所以结果可以逐项核对:2×4096 + 10×256 + 3×16 + 15 就是 10815,而任何一个字符错了,位值相加的结果都不会回到你预期的那个数。
十六的幂,从最右一位一直列到可接受的输入能达到的最左一位
| 位数 | 幂 | 数值 |
|---|---|---|
| 13 | 16¹³ | 4503599627370496 |
| 12 | 16¹² | 281474976710656 |
| 11 | 16¹¹ | 17592186044416 |
| 10 | 16¹⁰ | 1099511627776 |
| 9 | 16⁹ | 68719476736 |
| 8 | 16⁸ | 4294967296 |
| 7 | 16⁷ | 268435456 |
| 6 | 16⁶ | 16777216 |
| 5 | 16⁵ | 1048576 |
| 4 | 16⁴ | 65536 |
| 3 | 16³ | 4096 |
| 2 | 16² | 256 |
| 1 | 16¹ | 16 |
| 0 | 16⁰ | 1 |
十四行,从 16⁰ 到 16¹³,行数不是随手定的:十四位正是这一族能收下的最长输入,所以这张表覆盖了答案可能用到的每一个位,到这儿就停。从上往下读,就是按答案的位从右往左读——最后一行是最右边那个字符,第一行是最左边那个。中间一列把位数写成幂,也就是上面那串加法要乘的数;第三列是那个幂算出来的结果,也就是实际动手时乘的那个数。这些值与二进制那几页是重叠的:16 是 2⁴、256 是 2⁸、65536 是 2¹⁶,因为一个十六进制字符装着四个位。所以同一张表也回答了「四位一组当成数读时值多少」。它是固定的,不跟着你输入的数变。
公式
2A3F = 2×16³ + 10×16² + 3×16¹ + 15×16⁰ = 2×4096 + 10×256 + 3×16 + 15 = 10815
- 2A3F
- 要换算的那个十六进制数。字母不分大小写,2a3f 与 2A3F 是同一个值;前导零不改变任何东西,而前导负号会给出负的结果
- 16ⁿ
- 某一位对应的十六的幂,从最右边的零次幂开始数。最右一位值 16⁰,也就是 1;往左一位是 16¹,也就是 16;每往左一步就再乘一个十六
- 2、10、3、15
- 字符被读成的数值,字母这时已经换掉了——A 变成 10、F 变成 15,都发生在任何乘法之前。把 A 读成 1 正是这一行要拦的错,也是这道换算最常见的错法
- 2×4096
- 求和里的一项:字符的数值乘以它所在位值的幂。每个字符都贡献一项,包括本身是零的那些;只不过零项不改变结果,印出来的式子里直接省掉了
- = 10815
- 各项加起来的总数。它是一个十进制数,而不是某个进制的数字串,所以这一页的答案可以直接拿去做下一步算术
- 14 位
- 能收下的最长输入,也就是 1FFFFFFFFFFFFF。十四位正好让数值达到 9007199254740991,再宽机器就分不开相邻的整数,所以更长的输入会被拒收,而不是照换不误
凡是机器写的数要跟人写的数放在一起比,就要把十六进制读成十进制。一个颜色码是三个通道、每个两个字符,而知道 FF 是 255、80 是 128,就是「用眼睛调色」与「按数值调色」的分界。尺寸是同一回事:十六进制的 400 是 1024,一个眼熟的分页大小;内存图里印着 0x100000 的一段是 1048576 字节,而要往里再加一段的人得知道这个数。核对校验和、比对哈希前缀、换算数据手册里的掩码,做的都是这道换算;读一个其实是十六进制的序列号或标识符,做的也是它。课程里这道题写作把十六进制转成十进制,通常要求把幂写出来,而这正是这一页印出来的那串加法:一个字符一项,字母已经换好。它也是另一个工具给出十六进制答案时用来验算的那一步,因为十进制总数是唯一一个所有其它写法都能拿来跟它比的数。
算例
读 2A3F
- 把十六的幂写在四个字符下面,从右往左:1、16、256、4096
- 把字母换成数值:A 是 10、F 是 15
- 逐项相乘:2×4096 是 8192、10×256 是 2560、3×16 是 48、15×1 是 15
- 四项相加:8192 + 2560 + 48 + 15 = 10815
默认值,也是两个字母都要换的一条。A 不是 1、F 也不是 5——把字母当数字位读,答案会差到两千左右,错得还比较明显。更难发现的错是字母换对了、却乘错了位值。
一个字节,FF
- 两个字符,所以两位分别值 16 和 1
- F 是 15,左边那个字符贡献 15×16 = 240
- 右边那个字符贡献 15×1 = 15
- 240 + 15 = 255
两个字符能装的最大值,也是 FF 是 255 而不是 256 的原因:范围从 00 起算。这一对值得直接记住,因为它在颜色值、按字节计的字段、以及任何长度恰好两个字符的十六进制串里都会出现。
读 B2
- B 是 11,所以左边那个字符贡献 11×16 = 176
- 右边那个字符贡献 2
- 176 + 2 = 178
B 比 A 大一位,所以是 11×16 而不是 10×16——把 B 读成 11 还是读成 10,差出来的是十六,也就是整整一个十六进制位。同一个值在二进制那几页里当八位的例子用,它的二进制写法是 10110010。
最大的输入,1FFFFFFFFFFFFF
- 十四个字符,所以位值从 16¹³ 排到 16⁰
- 开头那个 1 值 16¹³,也就是 4503599627370496
- 十三个 F 都是 15,各自乘以自己那一位的幂
- 十四项加起来得到 9007199254740991
十四项是这串加法最长的样子,而它与十进制那几页的 9007199254740991、二进制那几页的五十三位是同一个上界。到这个量级方法本身没有任何变化——还是那一遍遍的乘加,重复十四次——这一点才是这个例子值得看的地方。
局限
这一页的输入是十六进制串而不是十进制数,所以没有小数点可拒收:0 到 9 与 A 到 F 之外的字符会被拒收。输入最长十四位,也就是 1FFFFFFFFFFFFF,更长的会被带着说明拒收,而不是截断。前导零会被收下且不改变数值;前导负号会给出负的十进制结果——和是按数字位算出来的,符号最后加在总数上。输入不分大小写,而位值和一律用大写字母印。下面那张表列出从 16⁰ 到 16¹³ 的十六的幂,它是固定的、不跟着你输入的数变;它在那里是为了让你能查到任何一位的值。反过来的方向,也就是把十进制数写成十六进制,是另一页的事,这一页除了印出来的那串加法以外不对结果做任何运算。
常见问题
- 怎么手算十六进制转十进制?
- 把十六的幂写在字符下面,最右边写 1,每往左一步乘一个十六;然后把每个字符乘以它下面的幂,再把结果加起来。字母要先换掉:A 是 10、B 是 11、C 是 12、D 是 13、E 是 14、F 是 15。2A3F 因此是 2×4096 + 10×256 + 3×16 + 15,等于 10815。
- A 到 F 这几个字母是什么意思?
- 它们依次是十到十五这六个值:A 是 10、B 是 11、C 是 12、D 是 13、E 是 14、F 是 15。十六进制需要十六个单字符,而十进制数字只给了十个,多出来的六个符号总要有来源,字母就是约定俗成的那一套。每个字母与数字位一样是系数,所以一个 F 值的是「十五乘以它所在位值」——最后一位是十五,往左一位就是 240。
- 这一页最大能换算多大的十六进制数?
- 十四位。上界是 1FFFFFFFFFFFFF,换算结果是 9007199254740991,也就是十进制那几页说的五十三个二进制位。更长的串会被带着说明拒收,而不是截短或四舍五入——超过这个宽度机器分不开相邻的整数,答案不可信。
- 为什么 FF 是 255 而不是 256?
- 因为计数从 00 开始,不是从 01 开始。两个十六进制字符一共有 256 种不同的串,从 00 排到 FF,所以它们能表示的最大值是 255——比可能的种数少一。同一个差一在二进制里也出现:八个位从 0 排到 255,这就是为什么凡是按字节说话的语言里,一个字节的上限都是 255。
- 十六进制转十进制与转二进制是一回事吗?
- 不是。转二进制是替换,不需要算术:每个字符变成四个位,方法就完了。转十进制是带权的求和,因为各位的值是十六的幂而不是二的幂——2A3F 是 2×4096 + 10×256 + 3×16 + 15,而字母要先变成数值才能乘。同一个串的二进制结果是 10101000111111,两个答案是同一个量的两种写法。
- 为什么页面要印一张十六的幂的表?
- 因为那些幂就是和里每一项要乘的权,查表比现算快。表从 16⁰ 列到 16¹³,对这一页来说是穷尽的:十四位是能收下的最长输入,任何被接受的答案都不会用到表里没有的位。把它和结果面板里那串加法对着看,就能知道哪个字符对应哪个权。
参考资料
- Hexadecimal——十六进制、A 到 F 这六个字母作为十到十五的数值,以及它与十进制之间的换算 — Wolfram MathWorld(美国)
- Number base——一个数的值为什么取决于它所在的位置与所用的底,以及同一个量如何写成不同的进制 — Wolfram MathWorld(美国)
- Powers of two——十六的幂就是从这个序列里每四项取一个,OEIS 编号 A000079 — OEIS Foundation Inc.(美国)
- 教育部关于印发义务教育课程方案和课程标准(2022 年版)的通知——该通知的附件清单第 5 项是《义务教育数学课程标准(2022 年版)》;进位制与不同进制之间的换算是该课标数与代数领域的内容,原文与学段要求以该附件为准 — 中华人民共和国教育部