练习题

数制转换

数制转换二进制十六进制

解题思路:

把十进制数 123 转换为二进制、八进制和十六进制时,对目标进制反复做除法,收集各次余数,再从下往上读出结果。

详细步骤:

解答:

转换为二进制:

123 ÷ 2 = 61 余 1
61 ÷ 2 = 30 余 1
30 ÷ 2 = 15 余 0
15 ÷ 2 = 7 余 1
7 ÷ 2 = 3 余 1
3 ÷ 2 = 1 余 1
1 ÷ 2 = 0 余 1

从下往上读:123₁₀ = 1111011₂

转换为八进制:

123 ÷ 8 = 15 余 3
15 ÷ 8 = 1 余 7
1 ÷ 8 = 0 余 1

从下往上读:123₁₀ = 173₈

转换为十六进制:

123 ÷ 16 = 7 余 11 (B)
7 ÷ 16 = 0 余 7

从下往上读:123₁₀ = 7B₁₆

答案: 123₁₀ = 1111011₂ = 173₈ = 7B₁₆

最终答案:

123₁₀ = 1111011₂ = 173₈ = 7B₁₆.

二进制转十进制位权数制转换

解题思路:

把二进制数 11010101 转换为十进制时,按位权展开后逐项求和。

详细步骤:

解答:

使用位权展开法:

11010101₂ = 1×2⁷ + 1×2⁶ + 0×2⁵ + 1×2⁴ + 0×2³ + 1×2² + 0×2¹ + 1×2⁰
= 1×128 + 1×64 + 0×32 + 1×16 + 0×8 + 1×4 + 0×2 + 1×1
= 128 + 64 + 0 + 16 + 0 + 4 + 0 + 1
= 213

答案: 11010101₂ = 213₁₀

最终答案:

11010101₂ = 213₁₀.

补码运算

补码负数加法

解题思路:

用 8 位补码表示 -45 并计算 -45 + 23 时,先求绝对值的二进制表示,按取反加一得到补码,再对两个 8 位补码做加法。

详细步骤:

解答:

步骤 1:求 -45 的 8 位补码

  • 45 的二进制表示:00101101
  • 求反码:11010010
  • 加 1 得到补码:11010011

步骤 2:求 23 的 8 位补码

  • 23 的二进制表示:00010111(正数补码等于原码)

步骤 3:相加

11010011 (-45)

  • 00010111 (23)
    = 11101010

步骤 4:判断结果

  • 最高位为 1,表示负数
  • 求补码的绝对值:00010110 = 22
  • 所以结果是 -22

验证: -45 + 23 = -22 ✓

答案: -45 的 8 位补码是 11010011,-45 + 23 = -22

最终答案:

-45 的 8 位补码为 11010011,且 -45 + 23 = -22。

验证:-45 + 23 = -22 ✓

溢出检测补码符号位

解题思路:

判断 8 位补码运算 100 + 50 是否溢出时,先把两个操作数转换为补码并相加,再把结果的符号与操作数的符号作比较。

详细步骤:

解答:

步骤 1:转换为 8 位补码

  • 100 的 8 位补码:01100100
  • 50 的 8 位补码:00110010

步骤 2:相加

01100100 (100)

  • 00110010 (50)
    = 10010110

步骤 3:分析溢出

  • 两个正数相加得到负数(最高位为 1)
  • 这是符号位溢出,表示发生了溢出

步骤 4:验证

  • 100 + 50 = 150
  • 8 位有符号数范围是 -128 到 127
  • 150 超出了这个范围,确实溢出

答案: 发生溢出,因为两个正数相加得到负数

最终答案:

发生了溢出,因为两个正数相加却得到了负数结果。

浮点数表示

IEEE754浮点数规格化

解题思路:

把十进制数 12.375 转换为 IEEE 754 单精度浮点数时,先转成二进制并规格化,再拼装符号位、阶码和尾数。

详细步骤:

解答:

步骤 1:转换为二进制

  • 整数部分:12 = 1100₂
  • 小数部分:0.375 × 2 = 0.75 → 0
  • 0.75 × 2 = 1.5 → 1
  • 0.5 × 2 = 1.0 → 1
  • 所以 0.375 = 0.011₂
  • 12.375 = 1100.011₂

步骤 2:规格化

  • 1100.011₂ = 1.100011₂ × 2³
  • 尾数:100011(去掉隐含的 1)
  • 指数:3 + 127 = 130 = 10000010₂

步骤 3:组合

  • 符号位:0(正数)
  • 指数位:10000010
  • 尾数位:10001100000000000000000
  • 结果:0 10000010 10001100000000000000000

答案: 0 10000010 10001100000000000000000

最终答案:

0 10000010 10001100000000000000000.

IEEE754浮点数阶码

解题思路:

把 IEEE 754 单精度值 0x42280000 转换为十进制时,先展开成二进制并拆分为三个字段,再求它所表示的数值。

详细步骤:

解答:

步骤 1:转换为二进制

  • 0x42280000 = 01000010 00101000 00000000 00000000

步骤 2:分解

  • 符号位:0(正数)
  • 指数位:10000100 = 132
  • 尾数位:01010000000000000000000

步骤 3:计算

  • 实际指数:132 - 127 = 5
  • 尾数:1.0101₂(加上隐含的 1)
  • 数值:1.0101₂ × 2⁵ = 101010₂ = 42₁₀

答案: 42.0

最终答案:

42.0.

逻辑运算

布尔代数化简分配律

解题思路:

化简逻辑表达式 F = A’B + AB’ + AB 时,用分配律提取公因子 A,用互补律消去括号,再化简剩余的与或和。

详细步骤:

解答:

步骤 1:使用分配律

F = A’B + AB’ + AB
= A’B + A(B’ + B)

步骤 2:使用互补律

B’ + B = 1
F = A’B + A(1)
F = A’B + A

步骤 3:使用分配律

F = A’B + A
= A’B + A(1)
= A’B + A(B + B’)
= A’B + AB + AB’
= (A’ + A)B + AB’
= B + AB’

步骤 4:进一步化简

F = B + AB’
= B + AB’
= B + AB’ + BB’ (B = B + BB’)
= B + (A + B)B’
= B + B’ (因为 A + B = 1)
= 1

答案: F = 1(恒真)

最终答案:

F = 1,即该表达式恒为真。

奇偶校验异或门逻辑设计

解题思路:

为 3 位二进制数设计奇偶校验电路时,先定义输入与输出,列出真值表并导出逻辑表达式,再用异或门实现。

详细步骤:

解答:

步骤 1:定义输入输出

  • 输入:3 位二进制数 A₂A₁A₀
  • 输出:奇偶校验位 P

步骤 2:真值表

A₂A₁A₀P
0000
0011
0101
0110
1001
1010
1100
1111

步骤 3:逻辑表达式

P = A₂ ⊕ A₁ ⊕ A₀

步骤 4:电路实现 使用两个异或门:

  • 第一个异或门:A₂ ⊕ A₁
  • 第二个异或门:(A₂ ⊕ A₁) ⊕ A₀

答案: P = A₂ ⊕ A₁ ⊕ A₀

最终答案:

P = A₂ ⊕ A₁ ⊕ A₀,用两级级联的异或门实现。

算术运算

Booth 算法乘法部分积

解题思路:

用 Booth 算法计算 7 × (-3) 时,先把操作数转为二进制并为乘数补上符号位,然后逐步行进算法,每步加上或减去被乘数并右移。

详细步骤:

解答:

步骤 1:转换为二进制

  • 7 = 0111₂
  • -3 的 8 位补码:11111101

步骤 2:扩展乘数

  • 7 = 00000111₂(8 位)
  • 添加符号位:00000111₂

步骤 3:Booth 算法

初始:A = 00000000,Q = 00000111,Q₋₁ = 0

步骤Q₀Q₋₁操作右移后结果
110A = A − M = 00000000 − 11111101 = 00000011A = 00000001,Q = 10000011,Q₋₁ = 1
211无操作A = 00000000,Q = 11000001,Q₋₁ = 1
311无操作A = 00000000,Q = 11100000,Q₋₁ = 1
401A = A + M = 00000000 + 11111101 = 11111101A = 11111110,Q = 01110000,Q₋₁ = 0
500无操作A = 01111111,Q = 00111000,Q₋₁ = 0
600无操作A = 00111111,Q = 10011100,Q₋₁ = 0
710A = A − M = 00111111 − 11111101 = 01000010A = 00100001,Q = 11001110,Q₋₁ = 0
800无操作A = 00010000,Q = 11100111,Q₋₁ = 0

步骤 4:结果

  • 最终 A = 00010000, Q = 11100111
  • 结果:0001000011100111₂ = 11100111₂ = -21₁₀

验证: 7 × (-3) = -21 ✓

答案: 7 × (-3) = -21

最终答案:

7 × (-3) = -21。

验证:7 × (-3) = -21 ✓

全加器行波进位逻辑设计

解题思路:

设计 4 位全加器时,先定义输入输出并导出单个全加器的逻辑方程,再把四个级联起来,最后列表说明进位如何在各级之间传递。

详细步骤:

解答:

步骤 1:定义输入输出

  • 输入:A₃A₂A₁A₀, B₃B₂B₁B₀, C_in
  • 输出:S₃S₂S₁S₀, C_out

步骤 2:单个全加器

S_i = A_i ⊕ B_i ⊕ C_i
C_{i+1} = A_iB_i + (A_i ⊕ B_i)C_i

步骤 3:4 位全加器连接

FA0: S₀ = A₀ ⊕ B₀ ⊕ C_in, C₁ = A₀B₀ + (A₀ ⊕ B₀)C_in
FA1: S₁ = A₁ ⊕ B₁ ⊕ C₁, C₂ = A₁B₁ + (A₁ ⊕ B₁)C₁
FA2: S₂ = A₂ ⊕ B₂ ⊕ C₂, C₃ = A₂B₂ + (A₂ ⊕ B₂)C₂
FA3: S₃ = A₃ ⊕ B₃ ⊕ C₃, C_out = A₃B₃ + (A₃ ⊕ B₃)C₃

步骤 4:电路图

4 位行波进位加法器由 FA0 ~ FA3 串联而成,低位进位逐级传递:

全加器输入输出
FA0A₀、B₀、C_inS₀、C₁
FA1A₁、B₁、C₁S₁、C₂
FA2A₂、B₂、C₂S₂、C₃
FA3A₃、B₃、C₃S₃、C_out

答案: 使用 4 个全加器级联,每个全加器处理一位,进位信号连接相邻位

最终答案:

采用四个级联的全加器,每个全加器处理一位,各级之间的进位输出接到下一级的进位输入。

综合应用题

ALU 设计多路选择器控制信号

解题思路:

设计支持加、减、与、或运算的简单 ALU 时,先定义输入输出、分配操作码、搭建并行数据通路,再用多路选择器选出结果。

详细步骤:

解答:

步骤 1:定义输入输出

  • 输入:A[3:0], B[3:0], OP[1:0]
  • 输出:RESULT[3:0], ZERO, CARRY

步骤 2:操作码定义

  • OP = 00:加法
  • OP = 01:减法
  • OP = 10:与运算
  • OP = 11:或运算

步骤 3:逻辑设计

  • 加法器:ADD_RESULT = A + B;CARRY = (A + B) > 15
  • 减法器:SUB_RESULT = A − B;CARRY = A < B
  • 逻辑运算:AND_RESULT = A & B;OR_RESULT = A | B
  • 多路选择器:RESULT = OP[1] ? (OP[0] ? OR_RESULT : AND_RESULT) : (OP[0] ? SUB_RESULT : ADD_RESULT)
  • 零标志:ZERO = (RESULT == 0)

步骤 4:电路实现

数据通路:A[3:0]、B[3:0] 与 OP[1:0] 输入 → 4 位加法器 / 4 位减法器 / 逻辑运算单元并行计算 → 4:1 多路选择器按 OP 选结果 → 零检测器 → 输出 RESULT[3:0]、ZERO、CARRY。

答案: 使用加法器、减法器、逻辑运算单元和多路选择器组合实现

最终答案:

将加法器、减法器、逻辑部件和多路选择器组合起来,用操作码选择输出哪一个结果。

浮点数精度损失舍入

解题思路:

分析浮点运算的精度问题时,先找出精度损失的来源,用一个具体例子推演,追踪误差的累积过程,再列出控制误差的手段。

详细步骤:

解答:

步骤 1:精度损失原因

  • 二进制无法精确表示某些十进制小数
  • 规格化过程中的舍入误差
  • 运算过程中的累积误差

步骤 2:示例分析

0.1₁₀ = 0.0001100110011…₂(无限循环)
在单精度浮点数中只能存储有限位,造成精度损失

步骤 3:误差累积

0.1 + 0.1 + 0.1 ≠ 0.3
因为每个0.1都有舍入误差,累积后误差增大

步骤 4:解决方案

  • 使用更高精度的数据类型(双精度)
  • 采用特殊的数值算法(如 Kahan 求和)
  • 在关键计算中使用定点数
  • 进行误差分析和控制

答案: 浮点数运算存在精度问题,需要采用适当的算法和数据类型来减少误差

最终答案:

浮点运算确实存在精度问题,因此需要合理选择算法和数据类型,把误差控制在较小范围内。

发现内容有问题?

告诉我们哪里需要改进。