数制:练习题及分步解答

免费的数制练习题,附图示、提示和完整详细解答。每次数值都不同,分三个难度:二进制和十六进制转十进制, 补码, 位、范围与存储。

免费练习题简单
点击各位来设置012806403201608040201

设置各位,使 8 位寄存器存放 0x99。该位模式的十进制值 N 是多少?

0x99

点击某一位,可在 0 和 1 之间切换。框中以无符号数显示你的位模式,你也可以直接输入。 精确答案:整数,不要四舍五入。

下一题 →
免费练习数制立即练习数制每天 5 道免费题目,无需绑定银行卡。

练习内容

  1. 简单二进制和十六进制转十进制
  2. 中等补码
  3. 困难位、范围与存储

关键公式

位权
二进制 2k,八进制 8k,十六进制 16k
转为十进制
Σ dk·bk
从十进制转换
除以基数,余数从下往上读
十六进制 ↔ 二进制
一位十六进制数 = 4 位二进制
二进制补码
按位取反后加 1

从零开始学习数制

1什么是数制

日常生活中你用十进制计数,基数为 10。它有十个数字,0 到 9,每一位的权是它右边那一位的十倍。

在 352 中,3 值 300,5 值 50,2 值 2。从右起各位的权是 1、10、100。

352 = 3 · 100 + 5 · 10 + 2 · 1

计算机把一切都存储为开或关的开关。所以它用二进制计数,基数为 2,只有数字 0 和 1。

一个二进制数字是一个比特(位)。8 个比特组成一个字节。

规则在每种进制中都一样:每个数字的值等于它本身乘以基数的某次幂。

自测 在十进制数 4721 中,7 值多少?
  1. 7000
  2. 700
  3. 70
  4. 7

答案: 700. 从右数起,各位的权是 1、10、100 和 1000。7 在第三位,所以它值 7 · 100 = 700。

2二进制和十六进制

在二进制中,从右起各位的权是 1、2、4、8、16,依此类推。每一位的权是它右边那一位的两倍。

对于 8 位的数,各位的权是 128、64、32、16、8、4、2 和 1。

012806413211608041201

读二进制数时,把所有为 1 的位的权相加。对于 0011 0010,就是 32 + 16 + 2 = 50。

一长串比特很难读。程序员常常改用十六进制(hex)来写,基数为 16。

十六进制需要 16 个数字。它用 0 到 9,然后是字母 A = 10,B = 11,C = 12,D = 13,E = 14,F = 15。

从右起,十六进制各位的权是 1、16、256 和 4096。十六进制数前面常加 0x,例如 0x2F。

一个十六进制数字正好是 4 个比特,所以 0011 0010 就是 0x32:0011 是 3,0010 是 2。

自测 0x1A 的十进制是多少?
  1. 110
  2. 11
  3. 161
  4. 26

答案: 26. A = 10。各位的权是 16 和 1,所以 1 · 16 + 10 · 1 = 26。把数字并排写(110)或相加(11)都忽略了位权。161 把各位的权顺序弄反了。

3负数:补码

所有位的权都为正的一个字节,存储 0 到 255。这称为无符号数。

为存储负数,计算机使用补码。唯一的变化是最左边一位的权是 −128,而不是 +128。

1−12806403201608041211

所以 1000 0011 是 −128 + 2 + 1 = −125。最左边一位称为符号位:当它为 1 时,这个数是负的。

8 位补码数的范围从 −128(1000 0000)到 +127(0111 1111)。

要写负数 −x,先写出 +x 的二进制,把每一位取反(0 变 1,1 变 0),再加 1。

−5 的例子:5 是 0000 0101。取反得 1111 1010。加 1 得 1111 1011。

同一个位模式按无符号数读,值为 256 − x。对于 −5 就是 251,而 1111 1011 的确是 128 + 64 + 32 + 16 + 8 + 2 + 1 = 251。

自测 8 位模式 1111 1111 存储的是一个补码数。它的值是多少?
  1. 255
  2. −127
  3. −128
  4. −1

答案: −1. −128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = −1。255 是按无符号数读的结果。−127 是把第一位当作 111 1111 前面的负号得到的。

4分步方法

二进制或十六进制转十进制:

  1. 在每个数字下面写出位权:二进制用 2 的幂,十六进制用 16 的幂,最右边是 1。
  2. 在十六进制中,把每个字母换成它的值:A = 10 直到 F = 15。
  3. 把每个数字乘以它的位权,然后全部相加。

补码:

  1. 读一个位模式时,把最左边一位的值取为 −128(8 位时),再加上所有为 1 的位的位权。
  2. 要写 −x,先把 +x 写成 8 位,把每一位取反,再加 1。
  3. 该位模式的无符号值是 256 − x。用它来检查你的各位。

比特、范围和内存:

  1. n 位可以给出 2ⁿ 种不同的模式。
  2. 作为无符号数,它们存储 0 到 2ⁿ − 1。作为补码,它们存储 −2ⁿ⁻¹ 到 2ⁿ⁻¹ − 1。
  3. 要让 k 个项目各有自己的编码,求满足 2b ≥ k 的最小 b。
  4. 对于内存,把项目数乘以每个项目的比特数,再除以 8 得字节,除以 1024 得 KiB。
M = 宽 × 高 × 每像素位数 / 8 / 1024 (KiB)

5例题讲解

跟着每一步走。打开下一步之前,先试着预测它。

例题讲解

8 位模式 1011 0110 以补码存储一个有符号整数。它的十进制值 N 是多少?

1

写出各位的位权

1−12806413211608141201

在补码中,最左边一位的权是 −128。其余各位是 64、32、16、8、4、2 和 1。

2

看符号位

最左边一位是 1,所以这个数是负的。

3

把为 1 的位相加

为 1 的位在权为 −128、32、16、4 和 2 的位置。

N = −128 + 32 + 16 + 4 + 2 = −74
4

用无符号值检验

按无符号数读,该模式是 128 + 32 + 16 + 4 + 2 = 182。

对于负数,无符号值是 256 − x,所以 x = 256 − 182 = 74。这又得到 N = −74。

5

用取反检验

把 1011 0110 取反得到 0100 1001,再加 1 得到 0100 1010。

0100 1010 是 64 + 8 + 2 = 74。所以原来的位模式是 −74。

答案

N = −74

6常见错误

  • 取反之后忘了加 1。结果会小 1。
  • 把补码模式按无符号数读,例如把 1111 1111 读成 255 而不是 −1。
  • 把符号位当作其余各位前面的负号。在补码中它的权是 −128。
  • 把位权的顺序弄反。权为 1 的位总是在最右边。
  • 在十六进制中把 A 当作 11。字母从 A = 10 开始。
  • 在内存题中混淆比特和字节。要把比特数除以 8。
自测 −5 的 8 位补码模式是什么?
  1. 0000 0101
  2. 1000 0101
  3. 1111 1010
  4. 1111 1011

答案: 1111 1011. 5 是 0000 0101。取反得 1111 1010,加 1 得 1111 1011。1111 1010 忘了加 1,而 1000 0101 是在 5 前面加了负号。

7考试题是什么样的

  • 简单:二进制和十六进制转十进制。把一个 8 位二进制数或一个 3 位十六进制数转换为十进制。
  • 中等:补码。读出有符号 8 位模式的值,或把负数写成位模式并给出它的无符号值。
  • 困难:比特、范围和内存。n 位能容纳的最大值或最小(最负)值,k 个编码所需的位数,或一幅图像占用的内存。

困难题的例子:一幅 256 × 256、每像素 24 位的图像占用 256 · 256 · 24 / 8 / 1024 = 192 KiB。

自测 要让 375 个项目各有自己的编码,最少需要多少位?
  1. 188
  2. 512
  3. 8
  4. 9

答案: 9. 2⁸ = 256 个编码太少,2⁹ = 512 够了,所以是 9 位。512 是编码的数量,不是位数。

在应用中一步一步地学在应用中一步一步地学

例题详解

例题 1简单
位权2256B16E1

把十六进制数 0x2BE 转换为十进制。求 N。

0x2BEA = 10 … F = 15

求: N

显示提示
  1. 十六进制各位从右往左的权为 1、16、256、4096。
  2. 把字母换成对应的值(A = 10 … F = 15),乘以位权后相加。
  3. 2 = 2, B = 11, E = 14.
显示答案和分步解答

位置计数制:每个数位的值等于该数字乘以基数的某次幂。二进制各位的权为 1、2、4、8、16、……;十六进制为 1、16、256、……,A–F 代表 10–15。在 8 位补码中,最左边一位的权是 −128 而不是 +128,负数就是这样存储的。

每个数字乘以其位权

2·256 + 11·16 + 14·1 = 702

答案

0x2BE = 702
例题 2中等
8 位补码0−12806403201608040201

设置各位,使其以 8 位补码存储 −45。按无符号数读取,该位模式的值 U 是多少?

N = −458 bit

求: U

显示提示
  1. 把 45 写成二进制,每一位取反,再加 1。
  2. 45 = 0010 1101₂.
  3. 作为无符号数,该位模式等于 256 + N。
显示答案和分步解答

设置比特位:每一位对应 2 的一个幂(128、64、…、1)。一个十六进制数字恰好是四位,在 8 位补码中最左边的位权重为 −128。按位运算对每个位位置分别进行。

取反加一

45 = 0010 1101
取反后: 1101 0010
+1 → 1101 0011

按无符号数读取

1101 0011₂ = 256 − 45 = 211

答案

U = 211
例题 3困难
点击各位来设置012806403201608040201

把各位设置为 0111 0001 >> 3 的 8 位结果。该结果的十进制值 R 是多少?

0111 0001>> 3

求: R

显示提示
  1. 右移 3 位,把每一位向右移动 3 个位置;从右端移出的位丢失,左侧补入 0。
  2. 从左到右,一次处理一个位位置。
  3. 结果的前四位是 0000。
显示答案和分步解答

设置比特位:每一位对应 2 的一个幂(128、64、…、1)。一个十六进制数字恰好是四位,在 8 位补码中最左边的位权重为 −128。按位运算对每个位位置分别进行。

逐位计算

右移 3 位,把每一位向右移动 3 个位置;从右端移出的位丢失,左侧补入 0。

0111 0001 >> 3
= 0000 1110

结果的值

0000 1110₂ = 14

答案

R = 14

问与答

什么是数制?

日常生活中你用十进制计数,基数为 10。它有十个数字,0 到 9,每一位的权是它右边那一位的十倍。

在 352 中,3 值 300,5 值 50,2 值 2。从右起各位的权是 1、10、100。

数制题目如何一步步求解?

位置计数制:每个数位的值等于该数字乘以基数的某次幂。二进制各位的权为 1、2、4、8、16、……;十六进制为 1、16、256、……,A–F 代表 10–15。在 8 位补码中,最左边一位的权是 −128 而不是 +128,负数就是这样存储的。

数制练习包括哪些内容?
  • 简单: 二进制和十六进制转十进制
  • 中等: 补码
  • 困难: 位、范围与存储

每道题的数值都不同,让你掌握方法,而不是记住答案。 卡住了?先打开一个小提示,需要时再查看完整解析。

练习方式

  • 每道题的数值都不同,让你掌握方法,而不是记住答案。
  • 卡住了?先打开一个小提示,需要时再查看完整解析。
  • 你的进度、错题和收藏的题目都会保留,方便考前复习。

本主题的前后主题

接下来学习

计算器

包含此主题的课程

计算机科学中的更多主题

可打印练习卷

免费练习数制立即练习数制每天 5 道免费题目,无需绑定银行卡。