本文整理计算机中数据信息的表示与校验方法。在计算机组成原理中,掌握定点数与浮点数的表示与计算,以及校验码的设计原理是第二章的复习重点。
第2章:数据信息的表示
2.1 数据表示的作用
计算机内部的所有信息都必须以二进制代码的形式进行存储与处理。现实世界中的各种数据在输入计算机时,均需被编码转换为二进制形式。
2.2 数值数据的表示
定点数是指小数点位置固定不变的数。在计算机中,定点数通常用于表示整数,或在某些特定场景下表示纯小数。
2.2.1 无符号数与有符号数
- 无符号数:所有二进制位都代表数值大小,没有符号位。对于 位的无符号数,其表示范围为:
- 有符号数:通常将二进制数的最高位作为符号位,其中用 0 表示正数,用 1 表示负数。
原码、反码、补码
为了便于在硬件电路中进行算术运算,有符号数在计算机内部有不同的编码表示方法。
- 原码:最高位为符号位,其余各位表示数值的绝对值。
特点:原码表示直观,但 0 的表示不唯一(存在正 0 和负 0 两种形式),且加减法运算规律复杂,符号位不能直接参与运算。
- 反码:正数的反码与原码相同;负数的反码则是符号位保持不变,数值位按位取反。
- 补码:正数的补码与原码相同;负数的补码则是其反码在最低位加 1。
求补码的速记法:负数原码自右向左数,找到第一个“1”,该“1”及其右边的所有“0”保持不变,该“1”左边的所有数值位按位取反,符号位保持不变。
补码的核心优势补码的引入彻底解决了原码运算的硬件难题。其优势主要体现在:
- 加减法运算统一:减法运算可以转换为加上一个负数的补码,使加减法器统一为加法器电路。
- 零的表示唯一:在补码中,正 0 和负 0 的编码合并为唯一编码。
- 符号位参与运算:符号位可以与数值位一同参与算术运算,无需单独的电路判断符号。
2.2.2 定点数表示:补码范围及其不对称性
定点数根据小数点位置的不同,可分为定点整数和定点小数。在补码表示下,两者的范围表现出独特的不对称性。
定点整数的补码范围
对于 位补码定点整数(含 1 位符号位, 位数值位),其表示范围为:
以 8 位补码为例:
- 最大正数为:
- 最小负数为:
- 8 位补码范围为:
定点小数的补码范围
对于 位补码定点小数(含 1 位符号位,小数点固定在符号位之后),其表示范围为:
以 8 位补码小数为例:
- 最大正数为:
- 最小负数为:
- 8 位补码小数范围为:
补码范围不对称的根本原因在原码和反码中,数值 0 占用了两个编码(例如 8 位原码中 和 均表示 0)。 而在补码中,0 仅有唯一编码()。原本在原码中表示负 0 的编码(如 8 位下的 ),在补码中被赋予了新的数值意义,用于表示最小的负数(即 或 )。因此,补码的负数表示范围比正数多一个。
应用例题:补码范围与转换
例题 1:设机器字长为 16 位,求该机器在补码表示下所能表示的定点整数范围。
解析: 将 代入定点整数补码范围公式 :
展开后即为:
变形补码与溢出检测机制
变形补码又称为双符号位补码,它采用两位二进制来表示数值的符号。
- 符号位定义:
00表示正数,11表示负数。 - 溢出判断原理:在变形补码加减运算中,若结果的两位符号位不同,则表明发生了溢出。具体为:
01:表示两个正数相加,结果超出了最大正数范围,称为正溢出。10:表示两个负数相加,结果超出了最小负数范围,称为负溢出。
变形补码的核心考点
- 溢出检测门电路:在定点运算器中,不论是单符号位(检测最高位进位与符号位进位是否相异)还是双符号位,溢出判断的逻辑本质都是异或判定,因此在硬件上都使用异或门电路实现。
- 能否避免溢出:变形补码只能使计算机更容易检测出溢出状态,但绝不能避免或阻止溢出的发生。若要避免溢出,必须扩大寄存器字长或采用浮点数表示。
定点数的算术移位规则
移位运算在计算机中有广泛应用。对于定点有符号数,在进行算术移位时,符号位保持不变,数值位移动时空出位置的填充规则如下:
| 机器数类型 | 对应正负 | 左移空位填充 | 右移空位填充 |
|---|---|---|---|
| 原码 | 正数与负数 | 填充 0 | 填充 0 |
| 补码 | 正数 | 填充 0 | 填充 0 |
| 补码 | 负数 | 填充 0 | 填充 1 |
补码算术右移实例补码负数算术右移时,高位空出处填充符号位 1。例如有符号补码整数 (为正数,符号位为 0)算术右移两位后,高位补 0 得到 。
2.2.3 浮点数表示:编码与规格化
定点数的小数点位置固定,这限制了它的数值表示范围和精度。浮点数通过将小数点的位置设计为可浮动的形式,能够以较短的字长表示极大或极小的数。
浮点数的一般格式
在计算机中,浮点数通常表示为:
其中,尾数 决定了浮点数的精度,阶码 决定了浮点数的范围和位置。
为了保证浮点数表示的唯一性并提高表示精度,必须对浮点数进行规格化处理。规格化要求尾数的绝对值在特定范围内。 对于定点小数补码表示的尾数,规格化形式要求符号位与数值最高位相反,即:
- 正数为:
- 负数为:
IEEE 754 标准
现代计算机通常采用 IEEE 754 标准进行浮点数存储与计算。
1. 单精度浮点数
- 位宽:32 位。
- 结构分配:1 位符号位,8 位阶码,23 位尾数。
- 偏置值:阶码采用移码表示,偏置值为 127。
- 计算公式:
2. 双精度浮点数
- 位宽:64 位。
- 结构分配:1 位符号位,11 位阶码,52 位尾数。
- 偏置值:阶码采用移码表示,偏置值为 1023。
- 计算公式:
阶码采用移码表示的原因阶码用于表示小数点移动的位数,带有正负。在比较两个浮点数的大小时,如果直接使用有符号的补码表示阶码,硬件电路比较大小时需要进行复杂的符号判断。而使用移码(即在真实指数上加上一个固定的正偏置值),可以将所有的指数转换成无符号的非负整数。这样,硬件可以直接使用无符号比较器来快速比较阶码的大小,从而简化了对阶操作的硬件实现。
应用例题:十进制数向单精度浮点数的转换
例题 2:将十进制数 转换为单精度浮点数的十六进制格式。
解析:
- 将绝对值转换为二进制数:
- 整数部分:
- 小数部分:
- 组合得到二进制数值:
- 对二进制数进行规格化:
- 移动小数点,使左边仅保留一位有效数字 1:
- 真实指数为 。
- 确定各个字段的二进制编码:
- 符号位:由于原数是负数,故 。
- 阶码:真实指数为 4,单精度偏置值为 127。计算阶码的移码:
- 尾数:规格化后的小数部分为 ,补足到 23 位得到:
- 拼接二进制编码并转换:
- 将上述字段按顺序拼接为 32 位二进制串:
- 每 4 位划分为一组,转换为十六进制:
- 转换结果为:。
2.2.4 浮点数加减运算步骤与对阶原则
浮点数加减运算的实现过程较为复杂,在计算机硬件中通常分为以下五个核心步骤进行:
- 对阶:使两个操作数的阶码大小一致,这是进行尾数求和的前提。
- 尾数求和:对阶完成后的两个尾数进行算术加减运算。
- 规格化:若求和后的尾数不满足规格化格式,需要通过左规或右规进行调整。
- 舍入:在对阶和右规过程中可能导致尾数低位被丢弃,需要执行舍入处理(如“0舍1入”法)以减小精度误差。
- 溢出判断:判定阶码是否超出了表示范围。
对阶原则:小阶向大阶看齐浮点加减中的对阶操作必须遵循小阶向大阶看齐的原则。即阶码小的数向阶码大的数对齐。对阶时,小阶的尾数右移,其阶码同步加 1,直到与大阶的阶码相等。
原理剖析:如果强行将大阶向小阶对齐,大阶的尾数就需要向左移位,这会导致尾数高位(最重要的有效数字)被移出丢弃,造成严重的数值错误。而小阶向大阶看齐时尾数右移,虽然丢弃了尾数低位数字,但这仅会造成微小的精度损失,而不会影响数值大体范围,因此在硬件上是唯一正确的选择。
浮点溢出的真谛:浮点数的溢出完全取决于阶码是否发生溢出。尾数求和后产生的溢出(如尾数进位)可以通过右规并增加阶码来修正,不代表真正的溢出;只有当阶码超出其所能表示的最大正指数(上溢)时,才会真正触发浮点溢出报错。
2.2.5 计算机中的数据类型与类型转换机制
在高级编程语言中,数据具有明确的类型属性。在不同数据类型之间进行转换时,底层的二进制处理逻辑各有不同。
符号扩展与零扩展
当把短字长的数据转换为长字长的数据时,需要填补高出的空位。
- 符号扩展:用于有符号数。高位填充原数据的符号位(正数填 0,负数填 1),从而确保数值大小不变。
- 零扩展:用于无符号数。高位一律填充 0,保证无符号数值的等价性。
符号扩展实例设机器中 8 位有符号补码表示的数为 (对应十进制 )。 当其扩展为 16 位有符号整数时,执行符号扩展,高位全部补符号位 1:
该数在 16 位补码下的数值依然是 。
截断
当把长字长的数据转换为短字长的数据时,计算机会直接丢弃高位,仅保留低位数值。
- 影响:截断可能会彻底改变原数据的符号和大小,从而导致溢出和精度丢失。
大端与小端存储模式
对于多字节的复合数据(如 32 位定点整数、64 位双精度浮点数),其存放在连续的内存字节中时,需要决定各字节的物理排列顺序。
- 大端方式:将数据的最高有效字节(即数值的高位字节部分)存储在低内存地址中。这种排列方式与人类从左到右的书写阅读习惯完全一致。
- 小端方式:将数据的最低有效字节(即数值的低位字节部分)存储在低内存地址中。这种方式便于计算机硬件直接从低位地址读取基础数值。
小端模式内存字节布局分析设有一个双精度浮点数机器码为
1122 3344 5566 7788H,其最高有效字节为11H,最低有效字节为88H。若将其从小端方式存放在以地址0000 8040H开始的连续存储单元中,其物理分布如下:
0000 8040H单元存放最低有效字节:88H0000 8041H单元存放:77H0000 8042H单元存放:66H0000 8043H单元存放:55H0000 8044H单元存放:44H0000 8045H单元存放:33H0000 8046H单元存放:22H0000 8047H单元存放最高有效字节:11H在期末考查中,经常给出 double 型变量的十六进制编码,要求指出小端方式下特定物理单元(如
8042H或8046H)中存放的具体内容。解题关键即在画出低地址存放低字节的对应表。
2.3 非数值数据的表示
非数值数据在计算机中同样通过特定的编码方式进行表示。
字符编码
最常用的字符编码为 ASCII 码,它使用 7 位或 8 位二进制代码来表示英文字母、数字和控制字符。在考试中,需熟记以下基准字符的对应关系:
- 字符
'0'对应的码值为 48(十六进制 30H) - 字符
'A'对应的码值为 65(十六进制 41H) - 字符
'a'对应的码值为 97(十六进制 61H) - 大小写字母的转换关系为:大写字母与对应的小写字母码值相差 32。
汉字编码
为了支持汉字的输入、处理和输出,计算机系统定义了多种汉字编码:
- 输入码:用于汉字输入(如拼音输入码、五笔字型码)。
- 国标码:作为汉字交换码,用于不同系统间的数据交换。
- 机内码:在计算机系统内部存储和处理汉字时使用的编码。
- 字形码:用于汉字的显示和打印输出。
汉字编码之间的换算公式在字符处理中,区位码、国标码和机内码存在以下确定的计算对应关系(计算时需统一转换为十六进制):
- 国标码 = 区位码(十六进制表示) + 2020H
- 机内码 = 国标码 + 8080H
2.4 数据信息的校验
数据在网络传输或硬件存储时,由于物理噪声等干扰可能会发生位翻转。为了保障数据的正确性,需要引入校验码。
2.4.1 码距与校验
码距是指在一个编码系统中,任意两个合法码字之间不同二进制位的最小个数。
码距与纠错公式设校验码系统的最小码距为 :
- 若要检测 位错误,则必须满足:
- 若要纠正 位错误,则必须满足:
- 若要同时检测 位错误并纠正 位错误(其中 ),则必须满足:
2.4.2 奇偶校验
奇偶校验通过在原数据位后附加 1 位校验位,使编码中二进制“1”的总个数满足特定奇偶性。
- 偶校验:使数据位与校验位中 1 的总个数为偶数。
- 奇校验:使数据位与校验位中 1 的总个数为奇数。
- 局限性:奇偶校验的最小码距为 2。它只能检测出奇数个二进制位发生翻转的错误,无法定位错误发生的位置,因此不具备纠错能力。
2.4.3 海明校验
海明校验通过在数据位中合理地插入多个校验位,并将数据划分为多个交叉的校验小组,从而实现检测错误并自动定位纠错的目的。其最小码距为 3。
核心步骤一:确定校验位个数
设数据位的位数为 ,海明码需要插入的校验位的位数为 。它们必须满足以下关系式:
实际计算例题
例题 3:已知需要传输的数据为 8 位二进制数据
10110100,求设计海明码时所需要的校验位位数 。解析: 已知 ,代入公式 进行试算:
- 若 :,不满足条件。
- 若 :,满足条件。
结果:需要设计 4 位校验位。总的海明码位宽为 位。
核心步骤二:确定校验位与数据位的位置分配
海明码的校验位 必须放置在整个编码中编号为 (即 1, 2, 4, 8, 16 等)的位置上,其余位置则按顺序填充数据位 。 对于上述 12 位海明码,其位置分配如下表所示:
| 海明码位号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 字符类型 | ||||||||||||
| 填入数值 | 1 | 0 | 1 | 1 | 0 | 1 | 0 | 0 |
核心步骤三:划分子集与计算校验位的值(偶校验)
海明码中,任何一个数据位号均可拆分为多个校验位号之和。例如:
- 同时属于 和 的校验组
- 同时属于 和 的校验组
- 同时属于 和 的校验组
- 同时属于 、 和 的校验组
- 同时属于 和 的校验组
- 同时属于 和 的校验组
- 同时属于 、 和 的校验组
- 同时属于 和 的校验组
按照偶校验原则(校验组内所有位异或结果为 0),写出各校验组的表达式:
将已知数据值代入:
得到海明校验码最终序列为:
核心步骤四:错误检测与纠错
接收端在收到海明码后,会重新计算各校验组的指征值 :
组合指征值 即为错误发生的物理位置。
移码与补码的关系
与其对应的移码之间仅有最高位(符号位)相反,其余各位完全一致。
常见类型转换与数据大小变化
- 无符号数扩展:直接在高位补 0,数值绝对不变。
- 有符号数扩展:采用符号扩展,正数高位补 0,负数高位补 1,数值绝对不变。
- 大类型转小类型:发生截断,极易导致溢出,从而使原数值的符号和数值发生剧变。
浮点数的溢出判定浮点数的溢出与定点数不同。浮点数是否发生溢出,完全取决于其阶码是否发生溢出(当阶码超出其最大正阶表示范围时即为上溢,当阶码低于最小负阶表示范围时即为下溢,下溢一般当作 0 处理,不引发系统中断)。尾数的溢出只影响表示精度,通常可通过规格化或舍入进行修正,不直接触发系统溢出报错。
常见考试易错点警示
易错点 1:海明码公式中字符含义混淆公式 中, 代表的是纯数据位的长度,而不是总的海明码长度。在计算时切忌直接代入总长度。
易错点 2:浮点数规格化判断中正负数的差异在补码浮点数中,规格化尾数的最高数值位与符号位必须相反。对于负数,其尾数最高数值位必须是 0,即格式为 。许多考生常误认为负数规格化也必须是最高位为 1。
2.6 历年期末真题分类详解
本节整理了 5 份期末考试真题中涉及本章的全部考题,进行系统化分类与解析。
2.6.1 原码、反码、补码、移码转换
Q1 (2022-2023-2 简答题)
题干:用一个字节存放有符号整数,若某数真值为 ,请写出它的四种机器数(原码、反码、补码、移码)。
解析:
- 一个字节为 8 位,最高位为符号位,剩余 7 位为数值位。
- ,写成 7 位为
1001011。 - 负数原码:符号位为 1,数值位为绝对值:
- 负数反码:符号位不变,数值位取反:
- 负数补码:反码末位加 1:
- 移码:补码符号位取反:
答案:原码 11001011,反码 10110100,补码 10110101,移码 00110101。
Q2 (2020-2021 A卷 计算题)
题干:已知 ,,则 和 的真值分别为多少?
解析:
- ,符号位为 1,是负数。
- 负数补码求真值:对补码求补得到绝对值。
取反:
加 1:
所以:
- ,原码符号位为 1,直接表示负数:
答案:,。
Q3 (2024-2025 C卷 填空题)
题干:已知数的补码是 ,左边起第一个 1 是符号位,它的真值应为________。
解析:
- 补码 的符号位为 1,是负数。
- 对数值位
10010取反: - 末位加 1:
- 所以原码为:
- 真值为:
- 转十进制:
答案:,即 。
Q4 (2024-2025 C卷 填空题)
题干:若寄存器内容为 10000000,若它等于 ,则为________码。
解析:
- 原码中:
- 反码中:
- 补码中 0 唯一:
- 题中
10000000表示 ,只能是原码。
答案:原码。
Q5 (2020-2021 B卷 选择题)
题干:设 为整数,,则其真值为( )。 A. +1 B. -1 C. +128 D. -128
答案:B
解析:
- A [错误]: 的原码应为
0,0000001,其符号位应为 0。 - B [正确]:
1,0000001的符号位为 1,数值位为 1,其代表的真值为 。 - C [错误]:8 位原码的数值位只有 7 位,能够表示的最大正数为 ,无法表示 。
- D [错误]:8 位原码能够表示的最小负数为 ,无法表示 。
Q6 (2019秋18级测试 计算题)
题干:已知 ,,求 , , , , 。
解析:
- 是正数,正数原码、反码、补码相同:
- 的移码等于补码符号位取反:
- 是负数,原码为:
- 负数反码:符号位不变,数值位取反:
- 负数补码:反码末位加 1:
- 的移码等于补码符号位取反:
答案:,,,,。
Q7 (2019秋18级测试 填空题)
题干:在机器码 ________ 和 ________ 中,零的编码是唯一的。
解析:
- 原码有: 零不唯一。
- 反码有: 零不唯一。
- 补码中 0 只有一种编码。
- 移码中 0 也只有一种编码。
答案:补码、移码。
Q8 (2020-2021 B卷 选择题)
题干:某机字长 16 位,采用补码形式(其中 1 位为符号位),则机器数所能表示的范围是( )。 A. B. C. D.
答案:C
解析: 16 位补码定点整数(1 位符号位,15 位数值位)的表示范围为:
即:
- A [错误]:未包含最小值 。
- B [错误]:最大正数超出了 16 位补码定点整数的表示范围,最大正数应为 。
- C [正确]:范围为 ,与 16 位补码定点整数的表示范围一致。
- D [错误]:最小值和最大值均不对。
2.6.2 补码加减运算
Q9 (2022-2023-2 计算题)
题干:已知 ,,求 的补码。
解析:
- ,用 5 位表示:
- ,用 5 位表示:
- 补码相加:
- 机器字长为 5 位,丢弃最高进位:
答案:。
Q10 (2020-2021 B卷 计算题)
题干:已知 ,,求 , , ,并判断是否溢出。
解析:
- 是正数:
- :
- 补码相加:
- 丢弃最高进位:
- 一正一负相加,不会溢出。
答案:,,,无溢出。
2.6.3 变形补码与双符号位
Q11 (2019秋18级测试 计算题)
题干:采用变形补码计算 的补码,并判断是否溢出。,。
解析:
- 变形补码使用双符号位:正数为
00,负数为11。 - 为正数:
- :
- 相加:
- 丢弃最高进位,保留双符号位:
- 双符号位为
00,相同,无溢出。
答案:,无溢出。
Q12 (2024-2025 C卷 选择题)
题干:双符号位补码运算中,结果符号位为 10 表示( )。 A. 正溢出 B. 负溢出 C. 正常结果 D. 无溢出
答案:B
解析:
- A [错误]:在双符号位补码运算中,正溢出时的双符号位为
01,而不是10。 - B [正确]:结果双符号位为
10表示负溢出。 - C [错误]:运算结果正常(无溢出)时,双符号位应相同,即为
00(正数)或11(负数)。 - D [错误]:无溢出时的双符号位为
00或11,若为10则表明发生了负溢出。
Q13 (2024-2025 C卷 计算题)
题干:用双符号位补码运算方法计算 , 的和,并分析溢出状态。
解析:
- 两数均为正数,双符号位为
00: - 相加:
- 结果双符号位为
01。 01表示正溢出。
答案:,发生正溢出。
Q14 (2022-2023-2 判断题)
题干:采用变形补码进行加减运算可以避免溢出。( )
解析:
- 变形补码用双符号位表示。
- 双符号位只能判断是否溢出。
- 它不能扩大机器字长,也不能避免溢出。
答案:错。
2.6.4 溢出判断
Q15 (2020-2021 A卷 选择题)
题干:在定点运算器中,无论是采用双符号位还是采用单符号位,必须有( )。 A. 译码电路 B. 编码电路 C. 溢出判断电路 D. 移位电路
答案:C
解析:
- A [错误]:译码电路在算术逻辑单元中用于指令或地址译码,并不是判断定点数加减运算溢出的必需部件。
- B [错误]:编码电路用于将特定信号转换成二进制代码,不是溢出判断的核心逻辑部件。
- C [正确]:无论是采用双符号位(判断两符号位是否相同)还是单符号位(判断最高数值位进位与符号位进位是否相同),运算器都需要配备溢出判断电路来检测运算结果是否超出了机器字长所能表示的数值范围。
- D [错误]:移位电路主要用于实现数据的算术移位和逻辑移位操作,并非溢出判断的必需部件。
Q16 (2019秋18级测试 选择题)
题干:在定点机中执行算术运算时会产生溢出,其根本原因是( )。 A. 主频过高 B. 运算结果无法表示 C. 寄存器位数不够 D. 内存容量不足
答案:B
解析:
- A [错误]:时钟主频仅决定计算机的运算速度,与算术运算是否产生溢出无关。
- B [正确]:溢出的定义及根本原因在于运算结果超出了机器字长所能表示的最大数值范围,导致该运算结果无法在定点机中正确表示。
- C [错误]:尽管寄存器位数有限是机器表示范围有限的原因,但溢出的直接根本表现依然是当前的具体运算结果超出了该范围而无法表示。
- D [错误]:内存容量的大小决定程序与数据的存储空间,与算术运算中发生的数值溢出无关。
Q17 (2024-2025 C卷 判断题)
题干:溢出判断电路一般用”与或非”门来实现。( )
解析:
- 单符号位补码溢出常用进位异或判断。
- 双符号位补码溢出常用两个符号位异或判断。
- 因此常用的是异或逻辑,不是“与或非”门。
答案:错。
2.6.5 移位运算
Q18 (2022-2023-2 填空题)
题干:补码定点整数 01010101 左移两位后的值为___。
解析:
- 原数:
- 算术左移时,符号位保持不变,数值位左移,右端补 0。
- 符号位为
0,数值位为1010101。 - 数值位左移两位:
- 加上符号位:
- 左移过程中有有效位被丢弃,若要求按数值乘 解释,则发生溢出。
答案:机器码结果为 01010100。
Q19 (2020-2021 A卷 填空题)
题干:补码定点整数 01010100 算术右移两位后的值为( )。
解析:
- 原数:
- 符号位为 0,是正数。
- 算术右移时,左侧补符号位 0。
- 右移两位:
答案:00010101。
2.6.6 定点数表示范围
Q20 (2022-2023-2 填空题)
题干:8 位原码能表示的不同数据有___个。
解析:
- 8 位二进制编码共有 个不同的状态。
- 在原码表示法中,零有两种不同的编码形式,即正零()和负零(),它们代表同一个数值 0。
- 因此,8 位原码能表示的不同数据个数为 个。其表示的具体范围为 。
2.6.7 浮点数与规格化
Q21 (2019秋18级测试 填空题)
题干:浮点数 ,根据 IEEE 754 单精度浮点数存储,其机器码是___。
解析:
- 十进制转二进制:
- 规格化:
- 符号位:
- 阶码偏置为 127:
- 尾数取小数部分
01001,补足 23 位: - 拼接:
- 转十六进制:
答案:C1A40000H。
Q22 (2019秋18级测试 选择题)
题干:若浮点数用补码表示,则判断运算结果是否为规格化数的方法是( )。 A. 阶符与尾符相同 B. 阶符与尾符相异 C. 数符与尾数小数点后第一位数字相异 D. 数符与尾数小数点后第一位数字相同
答案:C
解析:
- A [错误]:浮点数的规格化只取决于尾数,与阶符(阶码的符号位)和尾符(尾数的符号位)是否相同无关。
- B [错误]:浮点数的规格化只取决于尾数,与阶符和尾符是否相异无关。
- C [正确]:补码浮点数的规格化尾数形式要求符号位(数符)与尾数小数点后第一位数字(即尾数数值的最高位)相异。对于规格化的正数尾数,其形式为
0.1...;对于规格化的负数尾数,其形式为1.0...。 - D [错误]:若数符与尾数小数点后第一位数字相同(即正数为
0.0...,负数为1.1...),则说明尾数尚未进行规格化。
Q23 (2019秋18级测试 填空题)
题干:浮点加、减运算的步骤是 、、规格化、舍入、溢出判断。
解析:
- 浮点加减先让两个数阶码相同,称为对阶。
- 阶码相同后,对尾数进行加减,称为尾数求和。
- 后续步骤为规格化、舍入、溢出判断。
答案:对阶、尾数求和。
Q24 (2024-2025 C卷 简答题)
题干:请说明浮点数加减运算中对阶的原则,并以 , 计算 。
解析:
- 对阶原则:小阶向大阶看齐。
- 的阶码为 3, 的阶码为 1。
- 因为 ,所以将 的阶码升到 3。
- 阶码每增加 1,尾数右移 1 位; 的阶码增加 2,尾数右移 2 位:
- 尾数相加:
- 所以:
- 尾数为
0.111110,符号位 0 与最高数值位 1 相异,已规格化。
答案:对阶原则是小阶向大阶看齐;。
2.6.8 数据校验:奇偶校验
Q25 (2020-2021 B卷 填空题)
题干:需要传输 “11001110”,其奇校验位为( )。
解析:
- 数据
11001110中 1 的个数为: - 奇校验要求数据位和校验位中 1 的总数为奇数。
- 现在 1 的个数已经是奇数,所以校验位应为 0。
答案:0。
Q26 (2022-2023-2 判断题)
题干:奇偶校验可以校验奇数个位的出错,并能确定出错的位置。( )
解析:
- 奇偶校验可以发现奇数个位发生错误。
- 但它只能判断“有错”,不能判断“错在哪里”。
- 所以不能确定出错位置。
答案:错。
2.6.9 数据校验:海明码
Q27 (2020-2021 B卷 选择题)
题干:用海明码对长度为 8 位的数据进行检错和纠错时,若能纠正一位错,则校验位数至少为( )。 A. 2 B. 3 C. 4 D. 5
答案:C
解析:
- A [错误]:若校验位数为 2,则根据海明不等式 ,此时 ,左式为 ,而右式为 ,由于 ,无法纠正一位错。
- B [错误]:若校验位数为 3,左式为 ,而右式为 ,由于 ,无法纠正一位错。
- C [正确]:设校验位数为 ,数据位数 。若能纠正一位错,校验位数需满足海明不等式 。将各选项代入,当 时,左式为 ,右式为 ,满足 ,因此校验位数至少为 4。
- D [错误]:虽然 时满足 ,但题目要求的是“至少”的校验位数,因此 5 不是最小值。
2.6.10 数据校验:CRC
Q28 (2024-2025 C卷 选择题)
题干:CRC 校验码通过( )实现检错。 A. 多项式除法余数 B. 汉明距离 C. 奇偶统计 D. 累加和
答案:A
解析:
- A [正确]:CRC 校验将要发送的数据视为多项式的系数,并除以一个约定的生成多项式,进行模 2 除法,将得到的余数作为校验码附加在数据后面。接收端用相同的生成多项式对接收到的数据进行模 2 除法,若余数不为 0 则表示数据传输过程中发生错误。
- B [错误]:汉明距离是指两个等长码字之间不同二进制位的个数,是用来度量某种编码的检错和纠错能力的,并非 CRC 校验的直接检错机制。
- C [错误]:奇偶统计用于奇偶校验,通过统计数据中“1”的个数是奇数还是偶数来产生 1 位校验位,只能检测出奇数位错误,无法用于 CRC 校验。
- D [错误]:累加和校验是通过将所有发送数据字累加并取反等操作生成校验和,不涉及多项式模 2 除法。
2.6.11 大端与小端存储
Q29 (2020-2021 A卷 选择题)
题干:double 变量机器码为 1122 3344 5566 7788H,小端存放,则内存地址 0000 8046H 中存放的是( )。
A. 22H
B. 33H
C. 77H
D. 88H
答案:A
解析:
- A [正确]:
double类型变量在机器中占 8 字节,本题十六进制机器码为1122 3344 5566 7788H。小端存放的规则为“低有效字节存放在低地址内存单元”,各字节从低地址到高地址(假设从8040H开始)分布依次为:8040H存88H,8041H存77H,8042H存66H,8043H存55H,8044H存44H,8045H存33H,8046H存22H,8047H存11H。因此,内存地址0000 8046H中存放的是22H。 - B [错误]:
33H存放在内存地址0000 8045H中。 - C [错误]:
77H存放在内存地址0000 8041H中。 - D [错误]:
88H存放在内存地址0000 8040H中。
Q30 (2022-2023-2 选择题)
题干:同上题条件,问内存地址 0000 8042H 中存放的是( )。
A. 22H
B. 33H
C. 66H
D. 88H
答案:C
解析:
- A [错误]:
22H存放在内存地址0000 8046H中。 - B [错误]:
33H存放在内存地址0000 8045H中。 - C [正确]:根据 Q29 中的小端地址字节映射分布,从低地址到高地址依次为:
8040H为88H,8041H为77H,8042H为66H,8043H为55H,8044H为44H,8045H为33H,8046H为22H,8047H为11H。因此内存地址0000 8042H中存放的是66H。 - D [错误]:
88H存放在内存地址0000 8040H中。
Q31 (2024-2025 C卷 选择题)
题干:以下哪种存储方式将数据的最高位有效字节存储在最低地址内存单元?( ) A. 大端方式 B. 小端方式 C. 混合端方式 D. 任意方式
答案:A
解析:
- A [正确]:在大端存储方式中,数据的最高有效字节存储在最低的内存地址单元,最低有效字节则存储在最高的内存地址单元。
- B [错误]:在小端存储方式中,数据的最低有效字节存储在最低的内存地址单元,最高有效字节存储在最高的内存地址单元。
- C [错误]:混合端方式指字节序中大端和小端混合使用的方式,不符合将数据的最高有效字节存储在最低地址单元 of the definition.
- D [错误]:任意方式没有固定的存储规则。
2.6.12 类型转换
Q32 (2022-2023-2 选择题)
题干:unsigned short usi = 65535; short si = usi; 执行后 si 的值是( )。
A. -1
B. 0
C. 32767
D. -32768
答案:A
解析:
- A [正确]:
unsigned short类型的变量usi的值为 ,其对应的 16 位二进制机器码为 。在赋值给short si时,其底层的二进制位模式保持不变,仍为 。在 16 位有符号补码中,该全 1 位模式解析的真值为 。 - B [错误]: 的补码是 。
- C [错误]: 的补码是 。
- D [错误]: 的补码是 。
2.6.13 负数十进制向十六进制补码表示的转换
Q33 (2022-2023-2 选择题 / 2024-2025 C卷)
题干:假定一个十进制数为 ,按补码形式存放在一个 8 位寄存器中,该寄存器的内容用十六进制表示为( )。 A. C2H B. BEH C. BDH D. 42H
答案:B
解析:
- A [错误]:
C2H对应的二进制为 ,是 的原码。 - B [正确]:十进制数 的二进制表示为 。求 的补码过程为:原码为 ,除符号位外各位按位取反得到反码 ,反码在最低位加 1 得到补码为 。转为十六进制,高 4 位 对应 ,低 4 位 对应 ,因此该补码用十六进制表示为
BEH。 - C [错误]:
BDH对应的二进制为 ,是 的反码。 - D [错误]:
42H对应的二进制为 ,是 的原码、反码及补码。
2.7 典型期末练习题精选
本节精选了练习题库中与期末考点契合度高、且最具代表性的典型题目进行详解,以供备考复习。
2.7.1 机器码概念与转换
习题 1 (寄存器内容与移码真值判定)
原题:若寄存器内容为 00000000,若它等于 -128,则为( ) A. 原码 B. 补码 C. 反码 D. 移码
答案:D
解析:
- A [错误]:8 位定点整数原码
00000000表示的真值是 ,而非 。 - B [错误]:8 位定点整数补码
00000000表示的真值是 ,而非 。 - C [错误]:8 位定点整数反码
00000000表示的真值是 ,而非 。 - D [正确]:8 位移码的偏置值通常为 ,移码的数值等于真值加上偏置值。因此,对于真值 ,其对应的移码编码为 ,用 8 位二进制表示即为
00000000。
习题 2 (寄存器内容与有符号整数判定)
原题:若寄存器内容为 1111 1111,若它等于 -1,则为( )。 A. 原码 B. 补码 C. 反码
答案:B
解析:
- A [错误]:8 位定点整数原码
11111111的最高位为符号位 1 表示负数,数值位全 1 表示 127,因此真值为 。 - B [正确]:8 位定点整数补码
11111111是全 1 序列,根据补码规则,其对应的真值为 。 - C [错误]:8 位定点整数反码
11111111表示的真值是 。
习题 3 (机器码移码实际转换)
原题:假设某计算机的字长为 8 位,则数 -1010110 的移码表示形式为 A. 00101010 B. 11010110 C. 10101010 D. 01010110
答案:A
解析:
- A [正确]:真值为 (即十进制数 )。其 8 位原码为 ,除符号位外各位按位取反得到反码 ,反码在最低位加 1 得到补码为 。移码的符号位与补码相反,其余位相同,故其移码为 。
- B [错误]:
11010110为该数的原码表示。 - C [错误]:
10101010为该数的补码表示。 - D [错误]:
01010110为 的原码、反码及补码表示。
2.7.2 移位与类型扩展
习题 4 (有符号数算术移位)
原题:x = −26,用一个字节存放其补码,[x]补 = ,将 x 的补码算术左移一位为,将 x 的补码算术右移一位为____________。
解答:
- 的二进制为:
- 的原码:
- 反码:
- 补码:
- 算术左移一位:符号位不变,数值位左移,右端补 0:
- 算术右移一位:符号位不变,左端补符号位 1:
答案:,算术左移一位为 1,1001100,算术右移一位为 1,1110011。
习题 5 (十六进制补码类型扩展)
原题:16位补码0X8FA0扩展为32位应该是( )。 A. 0X0000 8FA0 B. 0XFFFF 8FA0 C. 0XFFFF FFA0 D. 0X8000 8FA0
答案:B
解析:
- A [错误]:高 16 位补 0 为零扩展,只适用于无符号数的扩展。
- B [正确]:16 位有符号补码
0X8FA0的最高十六进制位为8,对应的二进制最高位(符号位)为 (因为 ),表示该数是一个负数。负数补码进行有符号扩展(符号扩展)时,高位应全部填充符号位 。16 个二进制位 1 用十六进制表示为FFFF,因此扩展为 32 位后的结果为0XFFFF 8FA0。 - C [错误]:低 16 位原为
8FA0,此选项将其更改为FFA0,修改了原本的数据位,是错误的。 - D [错误]:高位没有进行完整的符号扩展,扩展后的位不正确。
2.7.3 变形补码与溢出计算
习题 6 (变形补码与溢出计算)
原题:已知有符号整数[X]原=0,0101,[Y]原=1,1011,请采用双符号位的变形补码,计算[X+Y]补、[X-Y]补,分别判断是否溢出。
解答:
- ,所以: 双符号位补码为:
- ,所以: 双符号位原码为: 反码为: 补码为:
计算 :
双符号位为 11,无溢出。
计算 :
- 。
- 因为 ,所以:
- 。
- 相加:
- 双符号位为
01,表示正溢出。
答案:,无溢出;,正溢出。
2.7.4 海明纠错码计算
习题 7 (汉明码纠错)
原题:已知接收到的汉明码为0100111(按配偶原则配置),试问欲传送的信息是什么?
解答:
- 汉明码为:
- 校验位在第 1、2、4 位:
- 数据位在第 3、5、6、7 位:
- 偶校验下计算校验组:
- 指误字为:
- 第 6 位出错,将 从 1 改为 0。
- 纠正后的汉明码为:
- 取数据位第 3、5、6、7 位:
答案:欲传送的信息为 0101。
习题2:课后习题详解
以下为本章教材配属的全部课后习题及详细解答。

习题2.1 解释下列名词
| 名词 | 详细物理与学术解释 |
|---|---|
| 真值 | 机器数所表示的实际数学数值,如机器码 11111111 若按 8 位补码解释,其代表的实际真值为 -1。 |
| 机器码 | 数据在计算机内部实际存储和运算时的二进制编码形态。 |
| 原码 | 最高位为符号位(正数用 0,负数用 1),其余各位用于表示该数数值的绝对值。 |
| 反码 | 正数的反码与其原码相同;负数的反码则是其符号位保持不变,其余各位数值按位取反。 |
| 补码 | 正数的补码与其原码相同;负数的补码则是其反码在最低位加 1。是现代计算机表示带符号整数的主流编码方式。 |
| 移码 | 将真值加上一个固定的偏移量(偏置值)后得到的机器码,常用于浮点数的阶码表示,方便硬件比对阶码大小。 |
| 模 | 编码系统的最大循环量。如 8 位二进制补码系统的模为 256。 |
| 定点数 | 小数点位置固定不变的机器数,主要用于表示纯整数或纯小数。 |
| 浮点数 | 小数点位置可以浮动的机器数,常表示为科学记数法形式,包含尾数和阶码两部分。 |
| 溢出 | 运算结果超出了机器字长所能表示的最大数值范围,包括正上溢和负下溢。 |
| 精度溢出 | 运算结果的有效位数超出了机器所能保留的最大精度位,需要进行舍入或截断处理。 |
| 浮点数规格化 | 通过调整尾数数值与阶码大小,使尾数最高有效位满足特定要求(如补码浮点数要求数符与尾数最高数值位异号),从而保证表示形式的唯一性。 |
| 隐藏位 | 在单精度和双精度浮点规格化表示中,尾数第一位必须为 1。该 1 在物理上被省略不存储,从而腾出 1 位用于增加精度。 |
| BCD码 | 用二进制编码来表示十进制数码 0 至 9 的二进制编码方式。 |
| 有权码 | 二进制编码的每一位均被赋予固定权值的编码(例如 8421 编码)。 |
| 无权码 | 二进制编码中各位均没有固定权值的编码方式(例如余 3 码)。 |
| BID码 | 二进制整型十进制表示法,是十进制浮点数的一种有效数值编码机制。 |
| DPD码 | 高密度十进制压缩法,是十进制浮点数中用于高密度存储十进制数据的一种编码机制。 |
| 二进制浮点数 | 基数为 2 的浮点数编码,如单精度浮点数。 |
| 十进制浮点数 | 基数为 10 的浮点数编码,适用于金融、税务等不允许二进制转换精细舍入误差的计算场景。 |
| ASCII码 | 采用 7 位二进制来编码表示英文字符、数字及控制字符的通用标准编码。 |
| 机内码 | 字符在计算机内部存储和传输时所使用的编码。 |
| 字形码 | 描述字形点阵或轮廓的数据,用于字符的显示与打印输出。 |
| 字库 | 存储所有字符字形码的物理字形点阵集合。 |
| 码距 | 编码系统中任意两个合法码字之间不同二进制位的最小个数,决定了检错和纠错的能力。 |
| 校验码 | 通过在有效数据位后附加多余的冗余位,用以在数据传输或存储中发现或纠正错误的编码。 |
| 多重奇偶校验 | 引入多个不同方向的奇偶校验机制,如水平偶校验与垂直偶校验结合,从而提高定位错误的能力。 |
| ECC码 | 纠错码,是一种能够自动检测并定位、纠正错误的校验编码方式。 |
| 海明码 | 一种具有纠正一位错误、检测两位错误能力的线性分组校验码。 |
| CRC码 | 循环冗余校验码,利用多项式模 2 除法的余数作为校验位,检错能力极强。 |
习题2.2 选择题(考研真题)
( 1 ) 由 3 个“1”和 5 个“0”组成的 8 位二进制补码,能表示的最小整数是________。
A. B. C. D.
答案:B
解析:
- A [错误]: 的 8 位补码表示为 ,其中有 2 个 1 和 6 个 0,不符合题干中的数量条件。
- B [正确]:8 位补码定点数对应的真值计算式为 。要使真值最小,必须使符号位为 1。符号位确定为 1 后,剩下 2 个 1 和 5 个 0 可以在低 7 位中进行分配。为了让真值尽可能小,低 7 位的无符号数值应尽可能小,即把剩下的 2 个 1 放在最低的两位,得到机器码 。其对应的真值为 。
- C [错误]: 的 8 位补码表示为 ,虽然包含 3 个 1 和 5 个 0,但其真值大于 ,不是该编码组合能表示的最小整数。
- D [错误]: 的 8 位补码表示为 ,其中有 7 个 1 和 1 个 0,不符合条件。
( 2 ) 32 位补码所能表示的整数范围是________。
A. B. C. D.
答案:B
解析:
- A [错误]: 超出了 32 位补码能表示的最小值。
- B [正确]: 位补码的数值范围公式为 。将 代入公式可得其范围为 。
- C [错误]:此范围不是 32 位有符号整数的表示范围。
- D [错误]:正数范围上限 是 32 位无符号整数的上限,而非补码的上限。
( 3 ) 已知带符号整数用补码表示,变量 的机器数分别为 、、,下列结论中,正确的是________。
A. 若 和 为无符号整数,则 B. 若 和 为无符号整数,则 C. 若 和 为带符号整数,则 D. 若 和 为带符号整数,则
答案:D
解析:
- A [错误]:若作为无符号数解释,,,,因此无符号下的大小关系为 。
- B [错误]:由于无符号大小关系为 ,此排序错误。
- C [错误]:若作为有符号整数补码解释, 最低有效位为 1 且符号位为 1,其真值为 ; 的符号位为 1,其真值为 ; 的符号位为 0,其真值为 。因此,有符号大小关系为 。
- D [正确]:根据计算得到的真值大小排序,满足 。
( 4 ) 若 short 型变量 ,则 的机器数是________。
A. B. C. D.
答案:A
解析:
- A [正确]:
short占 16 位。数值绝对值 。求 的补码:原码为 ,除符号位外各位取反得反码 。因反码为 ,再加 1 得到补码为 ,转换为十六进制即为E002H。 - B [错误]:
E001H对应的真值为 。 - C [错误]:
9FFFH对应的真值为 ,非 的位模式。 - D [错误]:
9FFEH对应的真值为 。
( 5 ) 考虑以下 C 语言代码:
unsigned short usi=65535;short si=usi;执行上述程序段后, 的值是________。 A. B. C. D.
答案:A
解析:
- A [正确]:
usi值为 65535,其 16 位无符号数二进制形式为全 1,即FFFFH。将usi赋值给有符号短整型si时,底层进行位拷贝,si也是FFFFH。16 位有符号数补码FFFFH解析对应的真值为 。 - B [错误]: 的 16 位有符号补码为
8001H。 - C [错误]: 的 16 位有符号补码为
8000H。 - D [错误]: 超出 16 位有符号整数的表示范围。
( 6 ) 假定编译器规定 int 和 short 类型长度分别为 32 位和 16 位,执行下列 C 语言语句:
unsigned short x=65530;unsigned int y=x;得到 的机器数为________。 A. B. C. D.
答案:B
解析:
- A [错误]:低 16 位变为了
7FFAH,与原本的值FFFAH不符。 - B [正确]:变量 值为 65530,对应的 16 位十六进制为
FFFAH。由于 为unsigned short,将其转换为unsigned int时进行零扩展,在高 16 位填充 0,得到 32 位机器数为0000 FFFAH。 - C [错误]:低位发生了改变,且高位填充不正确。
- D [错误]:高位填充为
FFFF是符号扩展的结果,一般用于有符号整型的数据类型转换。
( 7 ) 有如下 C 语言程序段:short si=-32767; unsigned short usi=si; 执行上述两条语句后, 的值为________。
A. B. C. D.
答案:D
解析:
- A [错误]:
usi为无符号数,无法表示负数。 - B [错误]: 的二进制无符号表示是
7FFFH。 - C [错误]: 的二进制无符号表示是
8000H。 - D [正确]:变量 的 16 位有符号补码表示为 。赋值给无符号类型的
usi时进行位拷贝,使其机器数为8001H,按无符号数解析对应的真值即为 。
( 8 ) C 语言代码如下:
int i = 32777;short si = i;int j = si;执行后 的真值为________。 A. B. C. D.
答案:B
解析:
- A [错误]:真值不可能是 。
- B [正确]:变量 。转换为 16 位
short类型时被直接截断保留低 16 位,即8009H。有符号补码8009H的最高位为 1,真值计算为 。赋值给int j时进行符号扩展,因为是符号扩展,其真值保持不变,仍为 。 - C [错误]: 的 16 位补码是
7FF7H,截断后的机器码为8009H,符号位为 1,故真值为负数。 - D [错误]:经过有符号短整型的截断之后,数据发生了溢出,不能恢复为原值 。
( 9 ) 下列数值中,不能用 IEEE 754 浮点格式精确表示的是________。
A. B. C. D.
答案:A
解析:
- A [正确]:二进制浮点数能够精确表示的十进制小数其分母必须能写成 2 的整数次幂。,分母中含有非 2 的因子 5,因此将其转换为二进制时为无限循环小数,无法精确表示。
- B [错误]:,可以精确表示为二进制小数 。
- C [错误]:,可以精确表示。
- D [错误]:,可以精确表示为二进制小数 。
( 10 ) float 型数据通常用 IEEE 754 单精度浮点数格式表示。若编译器将 float 型变量 分配在一个 32 位浮点寄存器 FR1 中,且 ,则 FR1 的内容是________。
A. B. C. D.
答案:C
解析:
- A [错误]:阶码字段正确但尾数字段表示的值不对。
- B [错误]:阶码部分计算错误。
- C [正确]:绝对值 。因为是负数,所以符号位 ;阶码字段 ;尾数字段 去掉规格化隐藏位 1 并补 0 后得到 。拼接得到二进制机器码:。
- D [错误]:拼接出的机器码值不正确。
( 11 ) 某数采用 IEEE 754 单精度浮点数格式表示为 ,则该数的值是________。
A. B. C. D.
答案:A
解析:
- A [正确]:将十六进制机器码
C640 0000H展开为二进制串:。解析各字段可知:符号位 代表负数;阶码字段 ,真实阶码 ;尾数字段为 ,加上规格化隐藏位 1 后有效值为 。代入公式得到值为 。 - B [错误]:阶码计算错误,真实阶码应为 13。
- C [错误]:尾数有效值计算错误,未加上规格化隐藏位 1。
- D [错误]:阶码与尾数均计算错误。
( 12 ) float 型能表示的最大正整数是________。
A. B. C. D.
答案:D
解析:
- A [错误]:对应阶码较小,非最大有效阶码。
- B [错误]:对应阶码字段未取到最大值。
- C [错误]:尾数部分的最大值及减项计算不正确。
- D [正确]:在单精度浮点数中,最大有效阶码字段值为 254,对应真实阶码 。尾数字段最大为全 1,对应最大有效值为 。因此单精度浮点数能表示的最大规格化正数为 。
( 13 ) IEEE 754 单精度浮点格式表示的数中,最小规格化正数是________。
A. B. C. D.
答案:A
解析:
- A [正确]:规格化单精度浮点数的最小阶码字段值为 1,对应的真实指数 。尾数字段取其最小值全 0,加上规格化隐藏位 1 后为 1.0。因此最小规格化正数为 。
- B [错误]:阶码字段转换为真实指数的计算不正确,应为 。
- C [错误]:阶码字段为 0 时表示非规格化数,非规格化数不属于规格化数的范畴。
- D [错误]:这是非规格化数能表示的最小正数,而非规格化正数。
( 14 ) float 型数据通常用 IEEE 754 单精度浮点格式表示。假定两个 float 型变量 和 分别存放在 32 位寄存器 和 中,若 ,,则 和 之间的关系为________。
A. 且符号相同 B. 且符号不同 C. 且符号相同 D. 且符号不同
答案:A
解析:
- A [正确]:由 可知其最高位(符号位)为 1,为负数;由 可知其最高位(符号位)为 1,也是负数。两者符号相同。 的阶码字段为 , 的阶码字段为 。因为 的阶码大于 ,说明 的绝对值大于 ,而两者都为负数,因此真值关系为 。
- B [错误]:两者均为负数,符号相同。
- C [错误]: 的绝对值大于 ,在都为负数时, 的数值更小。
- D [错误]:两者符号相同且 。
( 15 ) 假定变量 的数据类型分别为 int、float、double,已知 ,,,若在 32 位计算机中执行下列关系表达式,则结果为真的有________。
Ⅰ. i == (int)(float)i
Ⅱ. f == (float)(int)f
Ⅲ. f == (float)(double)f
Ⅳ. (d+f)-d == f
A. 仅 Ⅰ、Ⅱ
B. 仅 Ⅰ、Ⅲ
C. 仅 Ⅱ、Ⅲ
D. 仅 Ⅲ、Ⅳ
答案:B
解析:
- A [错误]:包含命题 Ⅱ,但 Ⅱ 为假。
- B [正确]:对各命题分析如下:
- Ⅰ. ,单精度浮点数尾数可以精确表示 以内的所有整数,因此 转换为
float精度无损,再转回int值不变,命题 Ⅰ 为真。 - Ⅱ. ,转换为
int时发生截断丢失小数部分变为 ,再转回float为 ,不等于原值,命题 Ⅱ 为假。 - Ⅲ.
float类型转换为double为精度扩充转换,无损,转回float仍相等,命题 Ⅲ 为真。 - Ⅳ. ,而 。由于 的阶码远大于 ,在执行 对阶时, 的尾数会向右移出导致其有效位全部丢失,出现大数吃小数现象,使得 。因此 ,与 不相等,命题 Ⅳ 为假。 综上分析,结果为真的有 Ⅰ 和 Ⅲ。
- Ⅰ. ,单精度浮点数尾数可以精确表示 以内的所有整数,因此 转换为
- C [错误]:未包含命题 Ⅰ,且包含假的命题 Ⅱ。
- D [错误]:包含假的命题 Ⅳ。
( 16 ) 已知带符号整数用补码表示,float 型数据用 IEEE 754 标准表示,假定变量 的类型只能是 int 或 float,当 的机器数为 时, 的值可能是________。
A. B. C. D.
答案:A
解析:
- A [正确]:如果 是
int类型,机器数C8000000H对应的 32 位有符号补码其最高位为 1,是负数,真值为 。若 是float类型,机器数C8000000H对应的二进制中,符号位为 1,阶码字段为 ,真实指数 ,尾数全 0,对应的值为 。选项中没有 ,因此 只能是int类型,值为 。 - B [错误]:浮点数解释下对应的真实指数为 17,计算出的值为 。
- C [错误]:浮点数解释下最高符号位为 1,应该为负数。
- D [错误]:整型解释下最高位为 1,真值应该为负数,不能是正数。
( 17 ) 的 IEEE 754 单精度浮点数表示为________。
A. B. C. D.
答案:A
解析:
- A [正确]: 绝对值对应的二进制为 。符号位 ;阶码字段 ;尾数字段 去掉规格化隐藏位 1 并补 0 后为 。拼接得到机器码为 。
- B [错误]:阶码和尾数值与计算出来的结构不相符。
- C [错误]:阶码计算不正确。
- D [错误]:指数和符号表示有误。
( 18 ) 已知 float 型变量用 IEEE 754 单精度浮点数格式表示。若 float 型变量 的机器数为 ,则 的值是________。
A. B. C. D. 非数(NaN)
答案:A
解析:
- A [正确]:机器数
8020 0000H对应的二进制串符号位为 1,阶码字段为全 0,尾数字段为0x200000(非全 0),因此是非规格化数。非规格化数的真实指数固定为 ,尾数无隐藏位 1,尾数值为 。代入非规格化数公式得到其值为 。 - B [错误]:计算中不应包含隐藏位 1,指数值也计算错误。
- C [错误]:尾数和指数计算均不正确。
- D [错误]:NaN 要求阶码字段为全 1,而本题阶码字段为全 0。
( 19 ) 某科学实验需要使用大量整型参数,为了在保证数据精度的基础上提高运算速度,需要选择合理的数据表示方法。若整型参数 、 的取值范围分别为 、, 和 最适宜采用________。
A. 32 位整数、32 位整数 B. 单精度浮点数、单精度浮点数 C. 32 位整数、双精度浮点数 D. 单精度浮点数、双精度浮点数
答案:C
解析:
- A [错误]: 的范围超出了 32 位整数所能表示的最大范围。
- B [错误]:单精度浮点数尾数有效精度只有 24 位,表示绝对值较大的整数(如 )时无法做到完全精确,会发生精度丢失。
- C [正确]: 的取值范围在 32 位有符号整数的表示范围内,使用 32 位整数表示可以在没有精度损失的同时提供最高效的硬件执行速度。 范围超出 32 位有符号整数上限,但双精度浮点数拥有 53 位尾数有效精度,完全可以无损地精确表示该范围内的所有连续整数。因此, 用 32 位整数, 用双精度浮点数最为适宜。
- D [错误]: 在 32 位整数表示范围中,整数运算性能优于浮点数,用单精度浮点数会增加不必要的性能开销。
( 20 ) 用海明码对长度为 8 位的数据进行检错和纠错时,若能纠正一位错,则校验位数至少为________。
A. 2 B. 3 C. 4 D. 5
答案:C
解析:
- A [错误]:校验位数为 2 时,代入海明不等式不成立。
- B [错误]:校验位数为 3 时,代入海明不等式不成立。
- C [正确]:设数据位数 ,校验位数为 。根据能纠正一位错的海明不等式 ,将各选项代入:当 时,左式为 ,右式为 ,不等式满足且 是使不等式成立的最小值。因此校验位数至少为 4。
- D [错误]:虽然 5 也能使不等式成立,但并非题目要求的至少需要的位数。
习题2.3 简答题
( 1 ) 为什么计算机中采用二进制进行数据表示和运算?
解答:
- 物理上易于实现:具有两种稳定物理状态的电子器件极易寻找且抗干扰性能强。
- 运算规则简单:二进制的算术加减乘除运算法则极少,硬件结构大为简化。
- 逻辑运算契合:二进制的 0 和 1 恰好能与布尔代数中的“假”与“真”无缝契合,便于逻辑门电路的实现。
( 2 ) 相对于奇偶校验,交叉奇偶校验的检错与纠错能力的提高需要付出哪些方面的代价?
解答:
- 冗余开销增大:交叉奇偶校验同时增加了水平和垂直校验位,使得非数据位的传输和存储开销显著增加。
- 硬件与算法变复杂:编码与译码检测电路在硬件实现上面临更多的逻辑门,延迟变大。
- 数据组织要求高:需要对数据进行行、列的矩阵化块状存取,增加了数据调度的开销。
( 3 ) 为什么计算机中采用补码表示带符号的整数?
解答:
- 统一加减法运算:通过求补码可以将减法操作巧妙化为加法操作,从而无需设计减法器,简化了运算器设计。
- 符号位参与计算:符号位与数值位能够共同参与运算,不需要单独的逻辑判定符号。
- 0 的表示唯一:消除了原码和反码中正 0 和负 0 的歧义。
( 4 ) 浮点数的表示范围和精度分别由什么决定?
解答:
- 表示范围:主要由浮点数中的阶码位数(以及指数所选用的基数和偏置值)来决定。阶码位宽越宽,所能跨越的数轴范围越大。
- 表示精度:主要由浮点数中的尾数位数(以及是否有隐藏位和所采用的舍入控制模式)决定。尾数位宽越宽,其保留的有效数字位数越多,精度越高。
( 5 ) 汉字输入码、机内码和字形码在汉字处理过程中各有什么作用?
解答:
- 输入码:用于从键盘将汉字输入至计算机内部,解决字形到拼音/字形码的转换。
- 机内码:用于汉字在计算机系统内部的存取、加工、编辑和网络传输交换。
- 字形码:用于将计算机内部处理后的机内码汉字转变为物理输出点阵,以显示或打印汉字。
( 6 ) 在机内码中如何区分 ASCII 字符和汉字字符?
解答: 在国标类编码(如 GB2312、GBK)中,通过最高位来做区分:
- ASCII 字符:使用单字节表示,其最高有效位固定为 0。
- 汉字字符:使用双字节表示,且两个字节的最高位均固定为 1。 计算机读取字节时,若检测到最高位为 1,则与下一个最高位为 1 的字节拼接成一个汉字;若最高位为 0,则单独作为一个 ASCII 码处理。
( 7 ) 为什么现代处理器中又开始支持十进制浮点数运算?
解答: 二进制浮点数在表示许多常用的十进制有限小数(如 0.1, 0.01 等)时会转化为二进制无限循环小数,导致计算中累积微小的舍入误差。这在金融、会计、税收等要求数值精确对齐的业务场景中是不可接受的。现代处理器加入十进制浮点数运算,能够从底层消除二-十进制转换带来的舍入损失,确保十进制精度。
( 8 ) 如何识别浮点数的正负?浮点数能表示的数值范围和数值的精度取决于什么?
解答:
- 正负识别:由浮点数机器码的最高位(即符号位 )识别, 代表正数, 代表负数。
- 数值范围:取决于阶码的位数(决定最大/最小指数)。
- 数值精度:取决于尾数的位数及是否包含隐藏位。
( 9 ) 浮点数有两个 0 会带来什么问题?
解答:
- 表示不唯一: 和 二进制不同,破坏了表示的唯一性。
- 极限与倒数歧义:会导致除 0 运算产生歧义(如 而 )。
- 比较分支逻辑复杂:在硬件比较器和数学函数运算中,必须加入额外的判定逻辑对符号进行特殊处理。
( 10 ) 简述 CRC 校验码的检错原理,CRC 能纠错吗?
解答:
- 检错原理:发送端在数据后追加 个 0 后与生成多项式对应的无符号二进制数做模 2 除法,所得的余数即为校验码,并替换原追加的 0 发送。接收端用相同的生成多项式对接收到的编码做模 2 除法,若余数为 0 说明传输无误,若余数非 0 说明出错。
- 纠错能力:CRC 主要用于高效率的检错。在一般的多位错场景下它无法定位具体错误,不具备纠错能力;但如果在仅发生单比特错误的严格假设下,可以通过建立综合余数表来定位具体的出错位,进而通过取反实现纠错。
习题2.4 写出下列各数的原码、反码和补码
原题:写出下列各数的原码、反码和补码。
解答: 在定点小数表示法中(含 1 位符号位,5 位数值位),各真值的表示情况如下表所示:
| 真值 | 原码 | 反码 | 补码 |
|---|---|---|---|
习题2.5 已知数的补码表示形式,求数的真值
原题:已知数的补码表示形式,求数的真值。
解答: 补码定点小数(1 位符号位,5 位数值位)求真值的逻辑如下:
- : 符号位为 0(正数),原码等同,真值为 。
- : 符号位为 1(负数)。求原码需除符号位外取反加 1:数值位 取反得 ,加 1 得原码为 。真值为 。
- : 符号位为 1。求原码:数值位全 1 取反为全 0,加 1 得原码 。真值为 。
- : 符号位为 1,数值部分全为 0。这是补码负数表示的极限值,真值为 。
- : 符号位为 0(正数),真值为 。
- : 符号位为 1。求原码:数值位 取反得 ,加 1 得原码 。真值为 。
习题2.6 无符号数与有符号整数的 C 语言转换分析
原题:C 语言中允许无符号数和有符号整数之间的转换,下面是一段 C 语言代码。
int x = -1;unsigned u = 2147483648;printf("x=%u=%d\n", x, x);printf("u=%u=%d\n", u, u);给出在 32 位计算机上上述程序段的输出结果并分析原因。
解答: 在 32 位计算机上,上述程序段的运行输出结果为:
x=4294967295=-1u=2147483648=-2147483648原因分析:
- 对于变量 :
- 是 32 位带符号整型,其内存底层的二进制补码存储为全 1,即
FFFF FFFFH。 - 当以
%u(无符号十进制)格式打印时,将该FFFF FFFFH解析为无符号数,值即为 。 - 当以
%d(有符号十进制)格式打印时,将其正常解析为补码负数,值即为 。
- 是 32 位带符号整型,其内存底层的二进制补码存储为全 1,即
- 对于变量 :
- ,是 32 位无符号整型,其内存存储为
8000 0000H。 - 当以
%u(无符号十进制)格式打印时,正常解析无符号,值为 。 - 当以
%d(有符号十进制)格式打印时,由于最高位为 1,被解析为有符号补码负数,其为 32 位有符号补码能表示的极限负数,真值即为 。
- ,是 32 位无符号整型,其内存存储为
习题2.7 分析几种情况下所能表示的数据范围
原题:分析下列几种情况下所能表示的数据范围分别是多少。 ( 1 ) 16 位无符号数; ( 2 ) 16 位原码定点小数; ( 3 ) 16 位补码定点小数; ( 4 ) 16 位补码定点整数。
解答:
- ( 1 ) 16 位无符号数: 全无符号,表示范围为:,即 。
- ( 2 ) 16 位原码定点小数: 1 位符号位,15 位数值位。最大正数为 ;最小负数为 。 范围为:。
- ( 3 ) 16 位补码定点小数: 1 位符号位,15 位数值位。由于补码 0 的表示唯一,负数比正数多表示一个边界负值 。 范围为:。
- ( 4 ) 16 位补码定点整数: 1 位符号位,15 位数值位。 范围为:,即 。
习题2.8 补码表示整数的模
原题:用补码表示二进制整数,机器码为 , 为符号位,补码的模为多少?
解答: 补码的“模”代表了该计数系统所能表征的最大数值环边界。该机器码共有 8 位二进制(含 1 位符号位),其所能代表的编码状态共有 个。 因此,该 8 位补码系统的模为 256(或记为 )。
习题2.9 采用 IEEE 754 32 位单精度标准表示十进制数
原题:用 IEEE 754 32 位单精度浮点数标准表示下列十进制数。 ( 1 ) ; ( 2 ) ; ( 3 ) 。
解答:
- ( 1 ) 十进制数 :
- 绝对值二进制:。
- 规格化:,指数 。
- 各字段编码:负数符号位 ;阶码字段 ;尾数字段 。
- 拼接为:。
- ( 2 ) 十进制数 :
- 绝对值二进制:经过精确的基二转换并规格化,得规格化前为 。
- 规格化形式为 。
- 各字段编码:正数 ;阶码 ;尾数舍入后为 。
- 拼接为:。
- ( 3 ) 十进制数 :
- 绝对值二进制:。
- 规格化:。
- 各字段编码:正数 ;阶码 ;尾数 。
- 拼接为:。
习题2.10 单精度浮点数还原真值
原题:求与单精度浮点数 对应的十进制数。
解答:
- 将
43940000H转换为 32 位二进制串: - 分解并解析各字段:
- 符号位 ,表示正数。
- 阶码字段 。真实指数为 。
- 尾数字段 。加上隐含位 1,规格化尾数为 。
- 还原十进制数: 对应的十进制数是 296。
习题2.11 单精度浮点数能表示的最大数和最小数
原题:求单精度浮点数能表示的最大数和最小数。
解答:
- 最大正数(最大规格化数): 符号位 ;阶码字段取最大有效值 254,对应真实阶码 ;尾数取最大值全 1。 计算值为:。
- 最小负数: 符号位 (代表负数,数轴上最左端);阶码和尾数均取最大值。 计算值为:。
- 最小规格化正数: 符号位 ;阶码字段取规格化最小值 1,指数 ;尾数字段为全 0。 计算值为:。
- 最小非规格化正数: 符号位 ;阶码字段为全 0,尾数字段的最低位为 1。 计算值为:。
习题2.12 正浮点数的比对分析
原题:设有两个正浮点数:,。 ( 1 ) 若 ,是否有 ? ( 2 ) 若 和 是规格化的数,上述结论是否正确?
解答:
- ( 1 ) 若 ,不一定有 。 反例证明:设 。如果尾数 (未规格化), ,则 ,,此时 成立。 反之,若 ,,则 ,,此时 。因此无法直接判断。
- ( 2 ) 若 和 是规格化的二进制小数,则结论依然不正确。且实际大小关系相反,一定有 。
原理分析:对于二进制规格化小数尾数,其大小范围被严格限制在 之间。
若 ,因指数为整数,至少有 。
- 对于 ,其最大上限满足:。
- 对于 ,其最小下限满足:。 由此可得:。即规格化下,必然有 。
习题2.13 阶码 3 位、尾数 7 位的浮点数极限表示
原题:设二进制浮点数的阶码为 3 位,尾数为 7 位。用模 2 补码写出它们所能表示的最大正数、最小正数、最大负数和最小负数,并将它们转换成十进制数。
解答: 假定阶码和尾数均采用补码表示,且尾数为规格化定点小数(符号位 1 位,数值位 6 位)。 阶码 3 位补码表示的范围为 。正数规格化尾数范围为 ;负数规格化尾数范围为 。
- 最大正数:
阶码取最大值 (补码
011);尾数取最大正规格化尾数 (补码0.111111)。 十进制值为:。 - 最小正数:
阶码取最小值 (补码
100);尾数取最小正规格化尾数 (补码0.100000)。 十进制值为:。 - 最大负数(最接近 0 的负数):
阶码取最小值 (补码
100);尾数取绝对值最小的负规格化尾数(补码1.011111,真值为 ,即 )。 十进制值为:。 - 最小负数(绝对值最大的负数):
阶码取最大值 (补码
011);尾数取最小规格化负尾数 (补码1.000000)。 十进制值为:。
习题2.14 十进制数转定长浮点规格化表示
原题:将下列十进制数表示成浮点规格化数,阶码为 4 位,尾数为 10 位,各含 1 位符号,阶码和尾数均用补码表示。 ( 1 ) ; ( 2 ) 。
解答:
- ( 1 ) 表示 :
- 数值为正,写成二进制为 。
- 正数规格化(尾数绝对值应在 之间):
- 阶码为 ,补码表示为
1111。 - 尾数为 ,补齐 10 位有符号小数补码为
0.111001000。 - 最终编码为:
1111, 0.111001000。
- ( 2 ) 表示 :
- 数值为负,写成二进制为 。
- 负数规格化(绝对值在 之间,补码尾数满足 形式):
由于 本身已经在范围之内,所以阶码为 ,补码为
0000。 - 求尾数 的 10 位补码:
- 原码为
1.100010100。 - 取反加 1 得补码为
1.011101100。
- 原码为
- 最终编码为:
0000, 1.011101100。
习题2.15 校验码设计与检错分析
原题:设有效信息为 01011011,分别写出其奇校验码和偶校验码。如果接收方收到的校验码为 010110100,说明如何发现错误。
解答:
- 统计有效数据:有效信息为
01011011,其中二进制“1”的个数为 5。 - 计算奇校验码:要求 1 的总个数为奇数。数据中已有 5 个 1(奇数),因此校验位填 0,奇校验码为
010110110。 - 计算偶校验码:要求 1 的总个数为偶数。数据中已有 5 个 1(奇数),因此校验位填 1,偶校验码为
010110111。 - 接收端检错分析:
- 接收方收到的数据为
010110100,统计其包含“1”的个数为 4。 - 若系统采用的是奇校验,而 4 是偶数,不满足奇数个 1 的校验规则,因此检错电路输出异常,成功发现错误。
- 若系统采用的是偶校验,而 4 是偶数,满足偶校验规则,此时校验电路判定无错,从而发生了漏检。
- 接收方收到的数据为
习题2.16 ASCII 交叉校验填空推理
原题:由 6 个字符的 7 位 ASCII 字符排列,再加上水平和垂直偶校验位构成表 2.27 所示的行列结构…
解答: 偶校验原则:每行、每列(含校验位本身)中“1”的总个数必须为偶数。
- 第一行(字符 3):
- ASCII 码 。
- 对应数据行:,对照可得:。
- 第二行(字符 ):
- 数据行:,水平校验位 。
- 前面有 2 个 1,加上 一共 3 个 1。要保持整行有偶数个 1,必须使 。
- 该行的 7 位二进制码为 ,查表可知代表字符 I。即 。
- 第三行(字符 +):
- ASCII 码 。
- 对应数据行:,对照可得:。
- 第五行(字符 D):
- ASCII 码 。
- 对应数据行:,对照可得:。
- 第四行(字符 )与第 3 列、第 4 列:
- 第 3 列数据:。已知 ,此列中 1 的个数为 。要使列满足偶校验, 。
- 第 4 列数据:。已知 ,此列中 1 的个数为 。要使列满足偶校验, 。
- 得到第四行数据为 ,查表代表字符 7。即 。
- 第六行(字符 =)与第 1 列、第 6 列:
- ASCII 码 。
- 对应数据行:,对照可得:。
- 第 6 列数据:(即 )。列中 1 的个数为 ,为偶数则 。
- 最后一行(VP)与水平偶校验列(HP):
- 列数据:。前 6 位包含 3 个 1,为满足偶校验, 。
填空最终结果:
- 处的比特分别为 1, 1, 1, 0。
- 处的比特分别为 1, 0, 0, 0。
- 处的比特分别为 1, 0, 1, 1。
- 和 处的字符分别为 I 和 7。
习题2.17 海明校验码完整计算与纠错
原题:设 8 位有效信息为 ,试写出它的海明校验码。给出过程,说明分组检测方式,并给出指错字及其逻辑表达式。如果接收方收到的 8 位有效信息变成 ,试说明如何定位错误并纠正错误。
解答:
- 确定校验位个数: 有效信息长度 。由 可知最小校验位个数 。总码长为 12 位。
- 位置分配布局:
校验位 依次放置在位号 1, 2, 4, 8 处,数据位 填充在其余位置:
- 计算校验位的值(偶校验): 每个校验位负责检验其二进制展开中包含自身位号的位。
- 负责:。
- 负责:。
- 负责:。
- 负责:。
- 海明校验码最终为:
110011011110。
- 海明校验码最终为:
- 指错字逻辑表达式:
接收端定义 4 位指错字 :
- 纠错定位分析:
若有效数据变成
01101111,说明第 8 个数据位 (对应海明码第 12 位)由 0 变为了 1。 此时接收到的海明码为110011011111。带入计算指错字:- 得到指错字为 。
- 指错字的值为 12,表明第 12 位发生错误。将第 12 位取反(由 1 变回 0),即可完成自动纠错,恢复出正确的有效信息
01101110。
习题2.18 循环冗余校验码计算与检错纠错
原题:设要采用 CRC 码传送数据信息 ,当生成多项式为 时,请写出它的循环冗余校验码。若接收方收到的数据信息为 ,说明如何定位错误并纠正错误。
解答:
- 生成 CRC 校验码:
- 生成多项式 (阶数 )。
- 在数据 后追加 3 个 0,得 。
- 将 与 做模 2 除法(即异或运算代替减法):
- 故 CRC 校验位为
011。 - 最终循环冗余校验码为 1001011。
- 接收端出错定位与纠正:
- 若接收到的数据信息为 ,拼上原校验位
011,得到接收码字为1101011。 - 用生成多项式 对
1101011做模 2 除法: - 因为余数为
011不为 0,说明传输中发生了错误。 - 假设仅发生单比特错误,建立该多项式下的综合余数表:
- 若第 1 位错,余数为
110 - 若第 2 位错,余数为
011 - 若第 3 位错,余数为
111 - 若第 4 位错,余数为
101 - 若第 5 位错,余数为
100 - 若第 6 位错,余数为
010 - 若第 7 位错,余数为
001
- 若第 1 位错,余数为
- 对照所得的余数
011,在表中对应第 2 位出错。 - 纠错:将接收码字
1101011的第 2 位取反,得到正确码字1001011,恢复出正确的数据信息为 1001。
- 若接收到的数据信息为 ,拼上原校验位
2.8 本章总结
本章核心公式及知识体系整理如下:
核心计算公式一览
| 性能评价指标 | 公式 / 关系式 | 适用场景 |
|---|---|---|
| 无符号数范围 | 纯数值计算 | |
| 定点整数补码范围 | 有符号整数存储 | |
| 定点小数补码范围 | 纯小数数值表示 | |
| 单精度浮点数公式 | 32 位浮点数大小确定 | |
| 海明码检验不等式 | 确定海明码校验位个数 | |
| 最小纠检错码距 | 设计系统容错机制 |
数据表示在底层的处理机制直接决定了计算机的运算方式。在学习时,应当注重补码与规格化浮点数的细节特征,并通过实际计算熟练掌握海明校验的计算过程,为进一步学习运算器硬件做好铺垫。
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时


















