这十二道原创题涵盖二进制与十进制、十六进制、带溢出的二进制加法、字符编码、位深度和一个简短的追踪题。题目由易到难,除非另有说明,二进制数都是 8 位。
先在纸上写出你的做法,再打开答案。每题标记对或错,再用最后的部分找出该复习哪一课。
你可以在 Python 推理沙盒检查转换,在伪代码追踪训练器追踪循环。这套练习属于数字与文字的表示。
题目
1.(容易) 把 00101101 转成十进制。
查看答案
有 1 的列:32、8、4、1。总和:32 + 8 + 4 + 1 = 45。
2.(容易) 把 150 转成 8 位二进制。
查看答案
128 放得下(剩 22)。64 不行。32 不行。16 放得下(剩 6)。8 不行。4 放得下(剩 2)。2 放得下(剩 0)。1 不行。位是 1 0 0 1 0 1 1 0,所以是 10010110。检查:128 + 16 + 4 + 2 = 150。
3.(容易) 6 位最大能存的十进制数是多少?
查看答案
6 位有 26 = 64 种组合,从 0 开始,所以最大是 64 − 1 = 63。检查:111111 = 32 + 16 + 8 + 4 + 2 + 1 = 63。
4.(容易至中等) 把 10101110 转成十六进制,再转成十进制。
查看答案
分组:1010 和 1110。1010 = 10 = A,1110 = 14 = E。十六进制:AE。十进制:10 × 16 + 14 = 160 + 14 = 174。用二进制检查:128 + 32 + 8 + 4 + 2 = 174。
5.(中等) 把十六进制 5D 转成二进制和十进制。
查看答案
5 = 0101,D = 13 = 1101,所以二进制是 01011101。十进制:5 × 16 + 13 = 80 + 13 = 93。检查:64 + 16 + 8 + 4 + 1 = 93。
6.(中等) 计算 00110011 加 01011101,给出 8 位结果,并用十进制检查。
查看答案
先做十进制检查:00110011 = 32 + 16 + 2 + 1 = 51,01011101 = 64 + 16 + 8 + 4 + 1 = 93。预期:144。
从右边逐列:第 0 列:1 + 1 = 0 进 1。第 1 列:1 + 0 + 1 = 0 进 1。第 2 列:0 + 1 + 1 = 0 进 1。第 3 列:0 + 1 + 1 = 0 进 1。第 4 列:1 + 1 + 1 = 1 进 1。第 5 列:1 + 0 + 1 = 0 进 1。第 6 列:0 + 1 + 1 = 0 进 1。第 7 列:0 + 0 + 1 = 1。
结果:10010000 = 128 + 16 = 144。吻合,而且没有向外的进位,所以没有溢出。
7.(中等) 计算 11110000 加 00010000,说明发生了什么。
查看答案
240 + 16 = 256。第 0 到 3 列都是 0 + 0 = 0。第 4 列:1 + 1 = 0 进 1。第 5、6、7 列:每列 1 + 0 + 1 = 0 进 1,第 7 列向外进 1。
8 位结果是 00000000,并带有向外的进位。结果溢出:256 对 8 位来说太大(最大 255),所以存储的 0 是错的。
8.(中等) 在 ASCII 中,A 的编码是 65。解码 72 69 76 80。
查看答案
72 − 65 = 7,是 H。69 − 65 = 4,是 E。76 − 65 = 11,是 L。80 − 65 = 15,是 P。把 A 算作位置 0:H 是第 8 个字母(位置 7),E 是第 5 个(位置 4),L 是第 12 个(位置 11),P 是第 16 个(位置 15)。单词是 HELP。
9.(中等) 解释为什么支持中文字符的通讯软件不能只用 7 位 ASCII。
查看答案
7 位 ASCII 有 27 = 128 个编码,涵盖英文字母、数字和一些符号,却没有中文字符。像 Unicode 这样更大的字符集,每个字符用更多的位,所以有足够的编码。代价是每个字符占用更多存储空间。
10.(中等至较难) 一个游戏的像素调色板用了 20 种不同的绿色。至少需要多大的颜色深度?
查看答案
24 = 16 小于 20。25 = 32 不小于 20。最小颜色深度是 5 位。
11.(较难) 一幅图像的颜色深度是 8 位。深度增加 2 位。可能的颜色数量增加多少倍?新的数量是多少?
查看答案
原来:28 = 256 种颜色。新深度:10 位,所以 210 = 1024 种颜色。每多一位数量翻倍,多两位就是乘以 2 × 2 = 4。检查:256 × 4 = 1024。
12.(较难) 追踪这段伪代码。输出是什么?它是 2 的几次方?
Value ← 1
FOR Count ← 1 TO 5
Value ← Value * 2
NEXT Count
OUTPUT Value
查看答案
| Count | 循环体之后的 Value |
|---|---|
| 开始 | 1 |
| 1 | 2 |
| 2 | 4 |
| 3 | 8 |
| 4 | 16 |
| 5 | 32 |
输出是 32,即 25。这也说明 5 位可以表示 32 个不同的值。
如果你做错了
| 题号 | 可能原因 | 复习 |
|---|---|---|
| 1、2、3 | 位值从错误的一端读起,或漏了一列 | 二进制与十进制互换 |
| 4、5 | 分组错误,或混淆 A 到 F | 把十六进制当作简短写法 |
| 6、7 | 丢了进位,或没有说明溢出 | 二进制加法与溢出 |
| 8、9 | 从错误的字母开始数,或解释时没有提到“更多的位” | 解释字符编码 |
| 10、11、12 | 用乘法而不是 2 的幂 | 位深度与可表示的值 |
把错误简短地记在错题记录与重测队列里,几天后再做一道新版本的同类题。如果错误一再重复,线上一对一 Computer Science 补习能让老师在你做题时直接看到你的步骤。