进制计算器
结果
结果
- 十进制
- 17
- 余数
- 0
所谓进制,就是一套把一串数字变成数值的规则:把每一位乘以「进制」的「它从右数第几位」次方,再把结果加起来,最右那位的位次是零。二进制里只有 0 和 1 两个数字,往左走一步就翻一倍:1011 是 1×8 + 0×4 + 1×2 + 1×1,也就是 11。十六进制里数字从 0 排到 9,再往后是 A 到 F,往左走一步乘 16:FF 是 15×16 + 15,也就是 255。这一页让你在 2 到 36 之间任意选一个进制,然后在那个进制里做加、减、乘、除。进制不是另一种数,它是同一批数的另一种写法,所以这一页把答案的两种读法并排印出来。二进制里 1011 加 110 得 10001——而那是 11 加 6,等于 17,而 17 写成二进制就是 10001。两行说的是同一件事;十进制那一行是给不常待在别的进制里的读者看的。动手之前有三件事值得先知道。九以上的位需要符号,按沿用已久的约定,字母 A 到 Z 依次代表十到三十五,这也是为什么 36 是键盘上的字符写得出来的最大进制。一个位只有在它小于进制时才合法,所以 2 不是二进制里的数字,1012 也不是二进制数,尽管它看起来很像。还有,进制本身不进答案:10001 之所以是十七,只因为你说了进制是二,所以这一页只印数字,进制留在你选的那个字段里。运算本身是普通的运算,变的只是写法。加法在某一列满进制时进位,而不是满十进位,这就是为什么 FF 加 1 会翻成 100 而不是停在 FG——没有 G 这个数字,因为十六不是一位。除法是进制运算最见用处的地方:一个数除以另一个数,得到商与余数,两者都按你选的进制印出来。余数那一行永远在。做加、减、乘时它是 0,因为对整数来说「没有剩下」与「余数是零」本来就是同一句话。减法可以跨过零,这时答案前面带一个普通的负号——负号不属于数字集合。
255 在 2、8、10、16 四个进制里的写法,以及它的位值展开
| 进制 | 该进制下的写法 | 位值展开 |
|---|---|---|
| 2 | 11111111 | 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 |
| 8 | 377 | 3×64 + 7×8 + 7 |
| 10 | 255 | 2×100 + 5×10 + 5 |
| 16 | FF | 15×16 + 15 |
顺着中间那一列读下来,同一个值出现了四次:11111111、377、255 与 FF。行与行之间这个数没有发生任何变化——变的只是符号,以及每一步的大小。第三列是把每种写法换算回 255 的那道算术:二进制里有八个 1,所以 128 一路到 1 的幂全都出现;十六进制里只有两位数,但第一位乘的是 16 而不是 2。留意位数是怎么随进制变高而缩水的。要写出 255,二进制要八位,八进制要三位,十进制要三位,十六进制只要两位——进制越大,同一个值用越少的位就说得完,因为每一位更值钱。这个取舍正是进制存在的全部理由:十六进制被用来写字节,不是因为它数学上特别,而是因为它的两位恰好盖住一个字节;再往下一层用二进制,是因为一根只分通断的线只有两个状态。这张表不跟着你输入的数变——面板回答那些,这张表展示的是一个值的四种写法。
公式
1011(二进制)+ 110(二进制)= 10001(二进制),而 11 + 6 = 17,10001(二进制)= 17
- b
- 进制,2 到 36 之间的整数。它是一个普通的数字输入框,而不是一张三十五个选项的清单,所以上下界是在框上挡的:1 和 37 在开始计算之前就被拒绝。1 进制不可能,因为一位符号数不过零;37 进制则要发明第三十七个键盘上没有的符号
- 1011
- 十一的二进制写法:1×8 + 0×4 + 1×2 + 1×1。要从右往左读,因为位次是往这个方向涨的。同一个十一写成十进制是 11,写成八进制是 13,写成十六进制是 B
- 10001
- 1011 + 110 的答案,仍在二进制里:1×16 + 0×8 + 0×4 + 0×2 + 1×1,也就是 17。路上进了两次位——个位那列到了 2,四那列也到了 2——每次进位都往左挪一位,和十进制里某列满十时进位是同一件事
- FF
- 十五乘十六再加十五,也就是 255。十六进制是刚好装得下一个字节的进制:两位十六进制数覆盖 0 到 255 的全部取值,这就是它出现在一切与字节有关的地方的原因。A 到 F 是九之后的六个数字
- 17 ÷ 5 = 3 余 2
- 把除法写开。同样的除法在二进制里是 10001 ÷ 101 = 11 余 10,这一页把商印成结果,把余数单独印一行。余数永远小于除数——正是这一点让它叫余数而不是分数
- A 到 Z
- 把十进制一路撑到三十六进制的那二十六个额外的位。A 是十,B 是十一,Z 是三十五。大小写都收,印出来是大写
从说另一种进制的系统里读数是日常用法。内存转储把每个字节印成两位十六进制,文件权限显示成 755 是因为三个数字各装了三位,子网掩码是四组八位,IPv6 地址整个是十六进制。这些场合你要的都不是十进制那个值,而是机器看到的那套写法。往同一批系统里写是镜像的那一面:设寄存器的位模式、由红绿蓝三个字节拼出一个颜色、或者想弄清楚一个左移过的值为什么变成了负数,都意味着在一个不是十的进制里做运算。课业里讲进制运算,讲的是「位值制是一种选择而不是事实」,而练习恰好就是这一页在做的事——二进制里进位、八进制里借位,然后看到只要两边按同一个进制读,同一次运算在每个进制里给的都是同一个答案。第四种用法是验算:如果 1011 加 110 在二进制里给出的十进制不是 17,那两种读法里有一种错了,而两种读法同时在这一页上,才让这个检查做得成。进制具体是 2 或 16 时,专门的页面走得更深——binary-calculator 与 hex-calculator 是同一套运算、进制已经填好,两个换算页则处理不经过运算、直接把一个值从一种进制改写成另一种。
算例
二进制里做加法:1011 + 110
- 先把两个操作数读成十进制,才知道自己在加什么:1011 是 11,110 是 6
- 11 + 6 = 17
- 把 17 写成二进制:17 = 16 + 1,所以各位是 1 0 0 0 1
- 二进制的答案是 10001,而十进制那一行确认它就是 17
这一页的默认输入,也是下面那张表换一个进制走一遍的那个数。把两个串按列相加得到同样的答案:1 + 0 是 1,1 + 1 是 0 进 1,接着 0 + 1 再加进位是 0 进 1,最后一次进位落在左边新开的一列上。某列满 2 就进位,这就是二进制加法的全部;也正是这几次进位让答案有五位宽,而两个操作数分别只有四位和三位。
一路进过最后一位:十六进制里的 FF + 1
- FF 是 15×16 + 15 = 240 + 15 = 255
- 加 1 得 256
- 把 256 写成十六进制:256 = 1×256 + 0×16 + 0,所以各位是 1 0 0
- 十六进制里的答案是 100——它是 256,不是一百
这个算例存在的理由就是那个坑:100 在十进制里是个小数,在十六进制里大得多。按列读一遍就能看出它为什么这么宽——F 加 1 是十六,而十六在十六进制里不是一位,于是进一留零,进上去的那个 1 又落在一个满的 F 上,再进一次。一次加法把答案往上顶了两位。这和十进制里 99 + 1 得 100 是同一件事,也是一个字节从 255 翻到 256 时需要第二个字节的原因。
带余数的除法:二进制里的 1011 ÷ 10
- 1011 是 11,10 是 2
- 11 ÷ 2 = 5 余 1
- 把 5 写成二进制:5 = 4 + 1,所以各位是 1 0 1
- 商是 101,余数那一行是 1——而 101 就是 5,十进制那一行确认了它
四种运算里唯一一个余数不为零的,也是余数那一行之所以在页面上的原因。注意商只是整数部分:11 除以 2 是 5.5,而这一页印的是 101 配一个余数 1,而不是 10.1 或 101.1,因为余数把答案留在整数里——那半个正躺在这个 1 里。验算是 5 × 2 + 1 = 11,它在每个进制里都成立。
局限
进制必须是 2 到 36 之间的整数。1 进制不可能,因为一位数字表达不了零以外的任何值;37 进制则要发明第三十七个符号;这两个值在开始计算之前就被输入框拒绝。小数与分数是拒绝而不是四舍五入,操作数前面的负号也一样:这一页解析的是数字,而符号和小数点都不是数字。位上超出了你选的那个进制,是另外一类情形,它怎么处理值得说清楚。把进制设成 2 再输入 1012,你得到的是一句通用的计算错误,而不是指名哪一个位不合法的说明。这是有意的取舍而不是疏漏:输入框上那条校验只拿到字符串本身,读不到它旁边的进制字段,而诚实的选项只有两个——接受「任何进制里都可能合法」的数字串,或者什么都接受。这一页选了前者。实际效果是输入框保持干净,错误出现在结果面板里——答案从来不会算错,只是说明得薄了一点。两个操作数都限长六十个字符,且不得超过双精度能精确表示的最大整数 9007199254740991,它写成十进制是十六位,写成二进制约五十位。答案受同一个上限约束:先精确算出结果再检查,所以结果越界的运算会被拒绝,而不是印一个四舍五入过的值。字母大小写都能输入,印出来是大写,所以 ff 与 FF 是同一个输入。前导零接受并忽略,也就是说 00001011 与 1011 是同一个数,两者都印成 1011。下面那张参考表固定是 255 在 2、8、10、16 四个进制里的写法,不跟着你的输入变——面板回答你的数,表把同一个值的四种拼法摆在一起。
常见问题
- 不在十进制里,两个数怎么加?
- 和十进制一样从右往左按列相加,只是某列满的是进制而不是满十。二进制里唯一的进位线是 2:1 + 1 得 0 进 1。所以 1011 + 110 得 10001,因为 2 那一列和 4 那一列各自溢出,各往左推了一个 1。如果你不想一路盯着进位,把两个操作数都换成十进制,在那儿算完,再换回来——这一页上十进制那一行展示的就是这个做法,而且每次都给同一个答案。
- 进制是 2 的时候,1012 为什么会失败?
- 因为 2 不是二进制里的数字——二进制的数字只有 0 和 1。规则是每一位都必须小于进制:二进制收 0 和 1,八进制收 0 到 7,十进制收 0 到 9,十六进制收 0 到 9 加 A 到 F。你会看到一句通用的计算错误,而不是指名哪一位不合法的说明,这是一个已知的粗糙边缘:输入框上那条校验只能看见你敲进去的字符串,看不见你选的进制,于是它接受「任何进制里都可能合法」的数字串,把与进制有关的检查留给计算本身。答案从来不会错,只是说明得比应该的薄。
- 能用哪些进制,为什么到 36 就停了?
- 2 到 36 之间的任何整数。上限来自键盘而不是数学:九以上的位需要符号,沿用的符号是字母 A 到 Z,一共二十六个——十加二十六等于三十六。1 进制不可能是另一个原因:只有一位数字的话,你写不出任何大于零的值,因为每一位都值 1,永远到不了 2。
- 十六进制里的 100 等于一百吗?
- 不等于,这正是本页第二个算例要拦住的错误。在十六进制里,100 表示 1×256 + 0×16 + 0,也就是 256。字符是一样的,但每一步的位值涨的是十六倍而不是十倍,所以同样的三个符号代表的值不同。这一页上十进制那一行存在,就是为了让你不必猜读的是哪一种。
- 为什么连做加法都把余数印出来?
- 因为对整数来说,「没有剩下」和「余数是零」是同一句话,而一行时有时无比一行永远在更难读。做加、减、乘时这一行是 0。只有除法会产生非零余数,那里它装着没有整除干净的那一部分——二进制里 1011 ÷ 10 余 1,也就是 11 ÷ 2 里商丢掉的那半个。
- 能在这一页上做十进制的运算吗?
- 能,而且这是检验这一页与普通计算器是否一致的方便办法:把进制设成 10,一切表现都和你预期的一样,因为数字、进位和答案的格式都没有变。你多拿到的是余数那一行和一句明写的进制,损失的没有。邻近几页走的是另一个方向——binary-calculator 与 hex-calculator 是同一套运算、进制已经设成 2 与 16,两个换算页则处理不经过运算、直接把一个值从一种进制改写成另一种。
参考资料
- Base——什么是位值制、一个 b 进制展开式的各位怎么读、以及为什么进制必须是大于 1 的整数 — Wolfram MathWorld(美国)
- Hexadecimal——十六进制、九之后的六个字母、以及「两位十六进制数等于一个字节」的那条约定 — Wolfram MathWorld(美国)
- Binary——二进制、以及它的各位所代表的 1、2、4、8 这些位值 — Wolfram MathWorld(美国)
- 教育部关于印发义务教育课程方案和课程标准(2022 年版)的通知——该通知的附件清单第 5 项是《义务教育数学课程标准(2022 年版)》;十进制记数法与二进制是信息科技课程与数学课程衔接处的内容,原文与学段要求以该附件为准 — 中华人民共和国教育部