跳到正文
IGCSE·Tuition
计算机科学 · 课程

二进制与十进制互换

黑板上的转换你能跟上,但面对一排空白的八个格子时却会卡住。

本页内容
  1. 二进制的位值怎么运作?
  2. 十进制怎样转成二进制?
  3. 示范例子
  4. 同样的方法怎样写成算法?
  5. 要留意的错误
  6. 自我检查
  7. 接下来学什么

二进制(binary)与十进制(denary)互换要靠位值:8 位数从左到右各列的值是 128、64、32、16、8、4、2、1。二进制转十进制,就是把有 1 的那些列的值加起来。十进制转二进制,就是逐列判断这个位值放不放得下。

这个技能是数字与文字的表示的起点,后面的十六进制、二进制加法和位深度都会用到它。

二进制的位值怎么运作?

十进制里,345 表示 3 个百、4 个十和 5 个一,每一列是右边那列的 10 倍。二进制里每一列是右边那列的 2 倍,所以从右往左各列是 1、2、4、8、16、32、64、128。

列的值1286432168421
位10110101

把每个 1 上面的值加起来:128 + 32 + 16 + 4 + 1 = 181。所以二进制 10110101 就是十进制 181。

十进制怎样转成二进制?

从最大的列开始往小的列走。每一列都问:这个值放得进剩下的数吗?

  1. 在八个空格上面写出八个列的值。
  2. 如果位值小于或等于剩下的数,写 1,并把它减掉。
  3. 如果不是,写 0,剩下的数不变。
  4. 一直做到最后一列。这时剩下的数应该是 0,这就是你的检查。

示范例子

把 183 转成 8 位二进制。

列之前剩余放得下?位之后剩余
128183是155
6455否055
3255是123
1623是17
87否07
47是13
23是11
11是10

答案是 10110111。加回去检查:128 + 32 + 16 + 4 + 2 + 1 = 183,吻合,而且剩余最后是 0。

同样的方法怎样写成算法?

上面的表格就是这段伪代码所做的事。

DECLARE Number : INTEGER
DECLARE Place : INTEGER
DECLARE Bits : STRING
Number ← 183
Place ← 128
Bits ← ""
WHILE Place >= 1
   IF Number >= Place
      THEN
         Bits ← Bits & "1"
         Number ← Number - Place
      ELSE
         Bits ← Bits & "0"
   ENDIF
   Place ← Place DIV 2
ENDWHILE
OUTPUT Bits

追踪过程:

PlaceNumber >= Place?BitsNumber
128是“1”55
64否“10”55
32是“101”23
16是“1011”7
8否“10110”7
4是“101101”3
2是“1011011”1
1是“10110111”0

Place = 1 之后,Place 变成 0,循环结束。输出是 10110111。你可以在 Python 推理沙盒用 print(format(183, "08b")) 和 print(int("10110111", 2)) 来验证。

要留意的错误

常见的失误是位值从错误的一端读起,把最左边的位当成 1。

题目: 把 110100 转成十进制。

错误做法: 1×1 + 1×2 + 0×4 + 1×8 + 0×16 + 0×32 = 11

6 位数从左边起各列是 32、16、8、4、2、1。正确做法是 32 + 16 + 4 = 52。避免这个错误的方法:在加任何东西之前,先把列的值写在位的上方,永远从右边的 1 开始,往左逐列翻倍。

自我检查

1. 把 00110110 转成十进制。

查看答案

有 1 的列:32、16、4、2。总和:32 + 16 + 4 + 2 = 54。

2. 把 200 转成 8 位二进制。

查看答案

128 放得下(剩 72)。64 放得下(剩 8)。32 不行,16 不行。8 放得下(剩 0)。4、2、1 不行。位是 1 1 0 0 1 0 0 0,所以是 11001000。检查:128 + 64 + 8 = 200。

3. 为什么 8 位寄存器存不下十进制数 256?

查看答案

8 位最大值是 11111111 = 255。数字 256 需要第九列,值为 256,所以需要 9 位。

接下来学什么

转换熟练之后,学用十六进制简短地写二进制,再做综合练习。Python 推理沙盒和伪代码追踪训练器可以让你测试自己的例子。

有些学生转换得慢但很准,到了考试却做不完。这正是我们的老师可以在线上一对一 Computer Science 补习中帮你处理的情况。

常见问题

二进制和十进制有什么区别?

十进制(denary)是我们平常用的基数 10,数字是 0 到 9,每一位是右边那位的十倍。二进制(binary)是基数 2,数字只有 0 和 1,每一位是右边那位的两倍。计算机用二进制,因为电路只有开和关两种状态。

8 位最大能存多大的数?

最大是 11111111,即 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255。把 0 也算进去,8 位可以表示 256 个不同的值,从 0 到 255。像 256 这样的数需要 9 位。

一定要写前面的 0 吗?

当题目要求 8 位二进制数时,要写。45 是 101101,但写成 8 位就是 00101101。多出来的 0 不改变数值,但表明你按题目要求使用了完整的 8 位。

有没有比逐位减位值更快的方法?

可以不断除以 2,再从下往上读余数。两种方法答案相同。选一种练到熟练,再用另一种来检查结果。

资料来源

  1. Cambridge IGCSE Computer Science 0478 课程大纲页面

更新于:

下一步

如果数字一变大你就弄丢位值,一对一的老师可以听你大声转换几个数,找出造成失误的习惯。

一小时付费试听课,按所安排老师确认的收费,RM80 起。

补习由家长或监护人安排。用 WhatsApp 把这页发给他们,他们就可以替你咨询。

家长:在这里咨询

  • 已通过我们的服务帮助 9,000+ 名学生
  • 9+ 年帮助 IGCSE 学生