跳到主要内容
CalcMax

十进制转十六进制换算器

结果

2A3F

十六进制

各位位值
2×4096 + 10×256 + 3×16 + 15

十进制转十六进制换算器把一个整数从十进制改写成十六进制。方法与产生二进制的那套一样,都是不断做除法,只是把二换成十六:用十六除这个数,留下余数,再用十六除商,一直到商为零为止。变的是字母表。除以二只可能余下 0 或 1,除以十六却可以余下 0 到 15 之间的任何值,而十六进制把十到十五这六个值写成字母 A 到 F——A 是 10,B 是 11,一直到 F 是 15。所以余数并不是直接就是十六进制数字:它们是以数值的形式出来的,凡是九以上的余数,都要先换成对应的字母,答案才算写完。以 10815 为例:10815 ÷ 16 得 675 余 15,675 ÷ 16 得 42 余 3,42 ÷ 16 得 2 余 10,2 ÷ 16 得 0 余 2。把余数从下往上读,是 2、10、3、15——换成 2、A、3、F,所以 10815 的十六进制写法是 2A3F。字母正是这一页存在的理由。答案旁边的位值和从另一头展示同一个数:十六进制里各位分别值 4096、256、16 和 1,而 2A3F 是 2×4096 加 10×256 加 3×16 加 15,加回来正好是 10815。十六进制之所以被用,是因为一个十六进制位恰好是四个二进制位,于是一个字节永远是两个字符、一个三十二位的值永远是八个——颜色码、内存地址、哈希都是这么写下来的,原因就在这里。

把 10815 一轮一轮除以十六,直到商变成零

轮次除法商余数
110815 ÷ 1667515 (F)
2675 ÷ 16423
342 ÷ 16210 (A)
42 ÷ 1602

这张梯子里有四个余数、其中两个写成「数值(字母)」的形式——15 (F) 与 10 (A)——这种双重写法正是这张表存在的理由。算术给你的是 15,答案要的是 F。把除法做对、然后照抄余数那一列的人写出来的是 2103 而不是 2A3F,这是这道换算唯一主动招来的错法。把这一列从下往上读,答案的字符就按顺序出现:2、10、3、15,把两个九以上的值换掉之后就是 2A3F。表固定用 10815,而上面的面板换算你输入的那个数,因为它展示的是方法而不是结果。商每一轮缩到大约十六分之一,所以即使是允许的最大输入,梯子也只有十四行——这正好就是十六进制上界 1FFFFFFFFFFFFF 的位数。

公式

10815 ÷ 16 = 675 余 15 → 675 ÷ 16 = 42 余 3 → 42 ÷ 16 = 2 余 10 → 2 ÷ 16 = 0 余 2 ⇒ 10815 = 2A3F = 2×4096 + 10×256 + 3×16 + 15

10815
要换算的那个整数,用十进制写。小数点与千分位分隔符都会被拒收而不是被四舍五入掉,所以写 10815,不要写 10,815
÷ 16
反复执行的那一步,十六取代了二进制版本里那个二。十六是你要换进去的底,所以每一轮问的都是「里面有几个十六」、剩下来多少
商
带进下一轮的那部分。商变成零就是停止的信号,它表示答案里再往左的位都不需要了
余数
这一轮产生的数字位,而这里它可以是 0 到 15 之间的任何值,不再只可能是 0 或 1。抹掉这个差别就是这道换算最常见的错法:余数 15 不是数字位 15,因为十六进制里根本没有能写它的单个字符
A — F
代表十到十五这六个值的字母:A 是 10、B 是 11、C 是 12、D 是 13、E 是 14、F 是 15。它们不是另一套要背的记法,每一个只是那个写不成单个十进制字符的数值
⇒ 2A3F
把各位从下往上拼起来的结果,而九以上的余数这时已经换成了字母。最先求出的余数是答案最右边的那个字符,所以按写下的先后顺序读出来的是反过来的答案
2×4096 + 10×256 + 3×16 + 15
把答案按位值读回来。与二进制不同,这里的系数不全是 1——正是这道核对能抓住字母换错的情况,因为 A 换错一个数,和就对不上

十六进制是工程上读的那种写法,所以凡是一个值要在两种写法之间搬动,就会用到这道换算。颜色码是最日常的一例:一个 0 到 255 的通道正好是两个十六进制字符,所以一个颜色写成六个字符,也所以设计师说的 10815 和开发者写的 2A3F 是同一个颜色。内存地址、校验和、哈希、数据手册里的寄存器值也都用十六进制印,理由一样——一个字符四个位,一个值的宽度一眼就能读出来。看调用栈或抓包的人每小时要把反方向做过几十遍,而写掩码或魔数的人做的是这个方向。课程里这道题往往是直接问的,一般写作把十进制转成十六进制并写出过程,下面那张梯子就是那个过程:一行一次除法,字母已经换好。它同时也是让宽度变明显的一步,因为两个字符是一个字节、八个是一个三十二位字,所以这道换算还回答了「这个值在目标格式里占几个字符」。

算例

  1. 把 10815 写成十六进制

    1. 10815 ÷ 16 = 675,余 15——写下 15,它写作 F
    2. 675 ÷ 16 = 42,余 3
    3. 42 ÷ 16 = 2,余 10——它写作 A
    4. 2 ÷ 16 = 0,余 2——商已经是零,到此为止
    5. 把余数从下往上读:2、10、3、15
    6. 把 10 换成 A、15 换成 F:答案是 2A3F

    默认值,也是两个替换都要做的一条。注意四个余数里有两个需要换字母,这不是运气不好而是常态:十六次里大约有六次会余出九以上的值,而一个三四位长的答案通常至少含一个。

  2. 一个字节写满,255

    1. 255 ÷ 16 = 15,余 15——写成 F
    2. 15 ÷ 16 = 0,余 15——也写成 F
    3. 商已经是零,把两个余数从下往上读:FF

    一个字节能装的最大值只占两个字符,十六进制存在的理由正在这里。FF 与 255 这一对值得直接记住:它是颜色通道的上限、多数语言里无符号字节的上限,也是一个字符原始数据的量。

  3. 一个十六的幂,1048576

    1. 1048576 ÷ 16 = 65536,余 0
    2. 65536 ÷ 16 = 4096,余 0
    3. 4096 ÷ 16 = 256,余 0
    4. 256 ÷ 16 = 16,余 0
    5. 16 ÷ 16 = 1,余 0
    6. 1 ÷ 16 = 0,余 1——从下往上读,得到 100000

    这是二进制那一页「2 的幂」例子在十六进制里的回声:底的幂写成一位 1 后面跟一串 0。1048576 是 16⁵,也是 2²⁰,而这正是这套记法的意义——同一个值在二进制里是二十一位,在十六进制里是六位,后者读得出来。

  4. 一个负数

    1. 负号是带着走的,不参与换算:数字位按第一条例子对 10815 求
    2. 10815 ÷ 16 = 675 余 15,一路到 0 余 2
    3. 从下往上读出的数字位是 2、A、3、F
    4. 把符号加在最前面:-2A3F

    前导负号会被收下、并印在最前面,位值和则整个括起来,让负号作用于整串加法而不是它的第一项。注意这不是什么:它是一个带符号的量值写法,不是机器里存的那个补码位模式。要的是负数的寄存器内容而不是它的带符号写法,那是另一个问题、另一页。

局限

这一页只换算整数,所以小数点会被拒收而不是被四舍五入——10815.5 在这里换不了。千分位分隔符也不收:写 10815,不要写 10,815,因为逗号在有些语言里是小数点,在两读之间猜一个不如直接要求写清楚。输入的上界是 9007199254740991,也就是十四位十六进制,它的十六进制写法是 1FFFFFFFFFFFFF——与二进制那几页的五十三位是同一个上界,因为它是同一个界的两种写法。前导零与前导负号都收;负号给出的是量值的带符号写法,不是补码位模式。下面那张表印的是 10815 的除法梯子,不跟着你输入的数变。反过来的方向,也就是把十六进制读回十进制,是另一页的事,这一页不对结果做任何运算。

常见问题

怎么手算十进制转十六进制?
用十六除,写下余数,再用十六除商,重复到商为零。把余数从下往上读,并把所有九以上的余数换成字母:10 是 A、11 是 B、12 是 C、13 是 D、14 是 E、15 是 F。10815 从上到下的余数是 15、3、10、2,往上读并替换之后就是 2A3F。
十六进制里为什么要用字母?
因为十六进制要十六个单字符,而十进制数字只提供十个。多出来的六个符号总要有个来源,字母是所有系统都同意的那套约定。A 是十、F 是十五,所以这套记法的数字位从 0 排到 9,再从 A 排到 F。这不是换算之外额外要背的东西——一个字母永远只是某个塞不进单个十进制字符的余数的名字。输入不分大小写,而答案里的字母一律写成大写字母,这是技术写作里通行的约定。
这一页最大能换算多大的十进制数?
9007199254740991,写成十六进制是 1FFFFFFFFFFFFF——十四个字符。这个上限与二进制那几页的五十三位来自同一个地方,因为它是同一个数在两种底下的写法。更大的会被带着说明拒收,而不是照换不误:超过这个宽度,机器已经分不开相邻的两个整数,换出来的答案不可信。
十六进制是不是就是二进制写短一点?
它是同一个值写在「底是 2 的幂」的进制里,所以两者之间才这么好转。一个十六进制字符恰好是四个二进制位,因此 2A3F 就是 0010 1010 0011 1111,一点不剩。这不是这个例子的巧合:它对任何十六进制数都成立,而十六进制之所以被用,正是因为这一点。转换过程中什么都没丢,也不需要任何舍入。
带小数的十进制数能换算吗?
这一页不行。它只收整数,所以 10815.5 会被拒收而不是被四舍五入。十六进制里的小数是完全定义好的——小数点右边那些位分别值十六分之一、二百五十六分之一——但收下它们就得决定保留几个字符、最后一位怎么舍入,而这一族的每一页都只换算整数。
为什么除了十六进制数还要印一个位值和?
因为它是能抓住替换错误的那道核对。要是你把余数 15 换成了别的字母,或者该写 F 的地方写了 A,印出来的和就加不回你输入的那个数——只有当字母读对了,2×4096 + 10×256 + 3×16 + 15 才是 10815。与二进制版本的同名求和不同,这里的系数不全是 1,所以答案的每一个字符都被单独算了账。

参考资料

相关计算器