当前位置: 首页 > news >正文

计算机组成原理第2章(竟成)

第 2 章 数据的表示和运算

【考纲内容】

1.数制与编码

        1.进位计数制及其数据之间的相互转换;

        2.定点数的编码表示

2.运算方法和运算电路

        1.基本运算部件:加法器;算术逻辑部件 (ALU)

        2.加 / 减运算:补码加 / 减运算器;标志位的生成

        3.乘除运算:乘 / 除运算的基本原理;乘法电路和除法电路的基本结构

3.整数表示和运算

        1.无符号整数的表示和运算;

        2.有符号整数的表示和运算

4.浮点数的表示和运算

        1.浮点数的表示:IEEE 754 标准

        2.浮点数的加 / 减运算

【考情统计】

年份

单选题

综合题

总分值

考点

2009

2

0

4

浮点数的表示和运算、C 语言数据类型转换与运算

2010

2

1

15

定点数的表示和运算、补码的表示范围、C 语言中各种数据类型的强制转换

2011

2

1

15

浮点数的表示和运算、标志位的判断、C 语言中数据类型范围、有符号数加减法、无符号数加减法、数据溢出判断

2012

2

1

14

真值与机器数的转换、IEEE 754 浮点数格式的表示范围、真值在机器中的表示方式

2013

3

1

20

IEEE 754 浮点数的机器数与真值转换、定点数的表示和运算、校验码(已删除考点)、标志位的判断

2014

2

0

4

数据溢出判断、定点数的表示和运算、浮点数的表示和运算

2015

2

0

4

定点数的表示和运算、浮点数的表示和运算

2016

2

0

4

C 语言中的数据表示、定点数的表示和运算

2017

0

2

23

定点数的表示和运算、C 语言中的数据表示和运算、浮点数的表示和运算、C 语言数据类型转换

2018

5

0

10

定点数的表示和运算、数据的表示范围、C 语言数据类型转换、标志位的判断、浮点数的表示和运算

2019

1

1

18

C 语言中数据表示和运算、定点数的表示和运算、标志位判断

2020

2

1

17

浮点数的表示和运算、定点数的表示和运算

2021

1

1

17

定点数的表示和运算、数据溢出判断

2022

2

0

4

定点数的表示和运算、浮点数的表示和运算

2023

3

0

6

定点数的编码表示、浮点数的表示、标志位的判断

2024

3

0

6

C 语言的数据表示、整数和浮点数的表示、整数的乘法运算

【考点解读】
        数据的表示和运算是本书的重难点。从考情统计来看,几乎每年都会在选择题中专门考查或在大题中有所涉及,总分值在 15 分左右。其中整数的表示和加减法运算、浮点数的表示和加减法运算、C 语言数据类型转换是每年的热门考点。

【复习建议】

        本章主要研究计算机如何对数据进行表示和运算,许多考生会觉得本章内容比较抽象且难以理解,但它是计算机二进制编码和运算的基础,也是后续章节学习的重要基石。纵观历年考题,本章内容占比相当大,可能单独考查数的表示与运算、溢出判断、IEEE 754 标准、C 语言数据类型转换等,也可能结合指令系统、数据通路等综合考查。只要涉及计算机中的数据,就可能涉及本章内容。复习时要注意方法和侧重。

        ·数制与编码及整数相关:数制与编码和整数的表示与运算是必须熟练掌握的,且难度不大,稍加练习就能看懂数据、顺畅转换。

        ·运算方法与电路:运算方法和运算电路中,硬件电路部分较难且考试很少考查,学习重心应放在运算方法上,加减运算优先级高于乘除运算。硬件方面重点掌握 ALU 与标志位,其余能看懂示意图即可。

        ·浮点数:考过非 IEEE 754 形式的浮点数,所以着重学习 IEEE 754 标准的浮点数,并且要熟悉浮点数的加减运算步骤。

在学习本章内容时,需要考生思考以下问题,这些问题会在章末给出答案。

1.计算机为何使用二进制进行编码和运算?

2.计算机中常用哪几种数字表示,一般以什么编码实现它们的存储与运算?

3.现代计算机通常采用什么编码进行加减运算,原码加减运算和补码加减运算有何区别?

4.根据补码的设计思想和编码规则,有哪些技巧可以更快地分析补码?

5.计算机为什么要引入浮点数表示?

6.浮点数的精度和表示范围取决于什么?

2.1 数制与编码

2.1.1 进位计数制及其相互转换

1.进位计数制

        进位计数法是指用一组固定的符号和统一的规则来表示数值的方法,常见的有二进制、八进制、十进制和十六进制 ,其中十进制在日常生活中经常使用,二进制和十六进制在计算机中经常使用。

        其中,r 为基数,表示各数位上可使用的不同数字符号的个数,每个数位计满 r 就要向高位进一位。r^i表示第 i 位上的权。k 的取值可以是0,1,⋯,r−1共 r 个数码中的任意一个。−m表示小数部分最低数位,n 表示整数部分最高数位。
        由于人类在进化中学会了十个手指头计数,因此日常生活中最常用的是十进制计数法。对于任意一个十进制数 ,其基数为 10,即ki​的取值为 0 ~ 9,各数位计满 10 就要向高位进一。类比十进制计数,N 进制数满 N 进一。例如:二进制满二进一、三进制满三进一、八进制满八进一、十六进制满十六进一。
备考时需学习的几种进位记数制:

二进制:r=2,基本符号为 0、1。

八进制:r=8,基本符号为 0、1、2、3、4、5、6、7。

十进制:r=10,基本符号为 0、1、2、3、4、5、6、7、8、9。

十六进制:r=16,基本符号为 0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。
        考试中,部分题干不会直接告知数值的进制,而是以前后缀形式提示考生。如:a=0xFF,前缀0x表示 a 是十六进制数D (Decimal) 是十进制后缀;B (Binary) 是二进制后缀,比如 101B 就是一个二进制数;O (Octal) 是八进制后缀;H (Hex) 是十六进制后缀。为方便记忆,在表 2.1 对以上内容做了归纳。

2.不同进制数之间的相互转换

(1) 八进制、十六进制与二进制的相互转换

1.引入八进制和十六进制的目的是( )。
A. 节约元器件
B. 可以表示更大范围的数
C. 比二进制运算速度快
D. 便于表示和阅读二进制

1.【参考答案】D
【解析】十六进制和八进制是二进制的等价表示,计算机使用二进制表示数据,十六进制和八进制只是为了方便人们表示、阅读二进制。

        将八进制或十六进制转换为二进制,只需将 1 位八进制数转换为 3 位二进制数、1 位十六进制数转换为 4 位二进制数;将二进制转换为八进制或十六进制,只需将 3 位二进制数转换为 1 位八进制数、4 位二进制数转换为 1 位十六进制数。八进制和十六进制的互相转换可以通过二进制作为媒介。具体转换结果如表 2.2 所示。


        提示:在 408 考试中,对于题干中出现的数值和需要得出的结果,如无额外说明,默认用十进制表示。特别要注意的是,408 考试题干中的地址、指令等数据大多以十六进制形式给出,将其转换为二进制便于分析与计算,而答案一般要求以十六进制形式写出。因此考生在备考中需要熟悉十六进制和二进制的互相转换,要求给出任意一组十六进制数,能够快速熟练地写出其二进制形式,反之亦然。
【例 2-1】将二进制数 1011110.01 转换为十六进制数。
答:小数点前高位补 0,小数点后低位补 0,凑够 4 位,得 0101 1110.0100;根据转换表,得十六进制数为:0x5E.4。
【例 2-2】将十六进制数 4AB5.3CH 转换为二进制数。
答:将数位上的每一位十六进制数转换成对应的四位二进制数,得:0100 1010 1011 0101.0011 1100;整数部分去掉多余的前导 0,小数部分去掉多余的尾 0,得:100101010110101.001111。


(2) 任意进制转换为十进制
使用公式将任意进制数的每一位与它们的权值相乘再累加,就可得出一个十进制数。例如:对于十六进制数(2AF5)16​,其十进制数为

2×16^3+10×16^2+15×16^1+5×16^0=10997;

对于二进制数(10101.01)2​,其十进制数为

1×2^4+0×2^3+1×2^2+0×2^1+1×2^0+0×2^(−1)+1×2^(−2)=21.25。
提示:在 408 考试中,最为常用的是将二进制转换为十进制,要求考生熟练掌握 “0000 - 1111” 对应的十进制数,如:1011 对应 11、1001 对应 9。计算时可掌握一些小技巧,如:计算 1111 1111 的十进制时,先令其加 “1”,得100000000=2^8=256,再减 “1”,结果为 255;计算 1111 1011 时,用255−4=251即可。
(3) 十进制转换为任意进制
① 整数部分转换
        将十进制整数转换为其他进制表示,就是用十进制整数去除以基数,并将所得结果继续除以基数,记录每一次得到的余数,直到商为 0 为止。将先得到的余数作为右边低位上的数位,后得到的余数作为左边高位上的数位。例如,将十进制整数转换为 N 进制整数采用 “除 N 取余,逆序排列” 法。具体做法是:
(a) 把 N 当作除数,用十进制整数除以 N,结果为一个商和余数;
(b) 将余数保留,再用商继续除以 N,则又得到一个新的商和余数;
(c) 继续保留余数,然后用商除以 N,又得到一个新的商和余数;
(d) 如此反复进行后,每次都保留余数,用商接着除以 N,直到商为 0 时为止;把先得到的余数作为 N 进制数的低位数字,后得到的余数作为 N 进制数的高位数字,依次排列起来,就得到了 N 进制数字。
        图 2.1 演示了将十进制数字 42 转换成二进制的过程。从图中得知,十进制数字 42 转换成二进制的结果为 101010。


        提示:408 考试内容多题量大,为提高做题速度,在备考和考试时,一般使用以下方法:
                                        42=32+8+2=2^5+2^3+2^1=101010
        这需要考生对 2 的 n 次幂较为熟悉。

② 小数部分转换
十进制小数转换成 N 进制小数采用 “乘 N 取整,顺序排列” 法。具体做法是:
        (a) 首先用 N 乘以十进制小数,结果为一个积,这个积包含了整数和小数两个部分;
        (b) 将积的整数部分取出(即使整数部分为 0),再用 N 乘以下余的小数部分,又得到一个新的积;
        (c) 继续将积的整数部分取出,用 N 乘以下余的小数部分;
        (d) 经过如此反复进行,每次都取出整数部分,用 N 接着乘以小数部分,直到积中的小数部分为 0,或者达到所要求的精度为止。
        把取出的整数部分按顺序排列起来,先取出的整数作为 N 进制小数的高位数字,后取出的整数作为低位数字,这样就得到了 N 进制小数。
        图 2.2 演示了将十进制小数 0.6875 转换成二进制小数的过程。从图中得知,十进制小数 0.6875 转换成二进制小数的结果为 0.1011。


        提示:类比于十进制整数转换为二进制,十进制小数也可以通过如下方法转换为二进制:0.6875=0.5+0.125+0.0625=2^−1+2^−3+2^−4=0.1011。
        一切二进制、八进制、十六进制的有限小数(即位数有限的小数,与位数无限的小数相区别)均可转换为有限十进制小数;但反过来则不一定,比如(0.2)10​写不成有限二进制小数。

③ 同时具有小数和整数的转换
        如果一个十进制数既有整数部分又有小数部分,可将整数部分和小数部分分别进行二进制、八进制或十六进制数的等值转换,然后将整数部分与小数部分的转换结果拼接起来。
        提示:在备考中,对于常用的二进制和十进制之间的转换,考生有必要熟悉。例如:看到 C 语言代码 “int x = 32766”,考生应该想到使用2^15=32768求 x 的二进制数。
具体转换如表 2.3 所示。

表 2.3 2的常用幂次方值

2 的幂

-3

-2

-1

5

6

7

8

9

10

11

12

15

16

0.125

0.25

0.5

32

64

128

256

512

1024

2048

4096

32768

65536

2.1.2 定点数的编码表示

1.机器数和真值

        像 -3、+5 这种带 “+” 或者 “-” 符号的数称为真值,真值可以理解为真正的值,一般用十进制表示,也可以用二进制表示。将数值数据在计算机中编码表示后的数称为机器数。机器数常用的有补码、原码和移码表示法,其中最常见的是补码表示法。例如:+6 用 8 位补码表示为 0000 0110,说明 + 6 的机器数为 0000 0110B (06H);用 8 位补码表示 -10 为 1111 0110,说明 -10 的机器数为 1111 0110B (F6H)。由此可见,真值和机器数是同一个数据的两种不同表示形式

2.定点数

        小数点固定在某一位置的数称为定点数,任意一个定点数由两部分组成:数符部分和数值部分。当小数点位于数符和第一数值位之间时,为纯小数;当小数点位于数值位之后时,为纯整数。采用定点数的机器称为定点机。数值部分的位数决定了定点机中数的表示范围。定点表示法可用来表示定点小数和定点整数。
(1) 定点小数
        定点小数约定小数点在数值位左边,一般用定点小数表示浮点数的尾数部分。对于数据Y=yn−1​.yn−2​⋯y1​y0​,其在计算机中的表示形式如图 2.3 所示。


(2) 定点整数
        定点整数约定小数点在数值位的右边,定点整数一般用来表示计算机中的整数。对于数据Y=yn−1​yn−2​⋯y1​y0​,其在计算机中的表示形式如图 2.4 所示。

3.原码、反码、补码和移码

定点数编码方法主要有以下四种:原码、反码、补码和移码。
(1) 原码
① 原码的引入与编码规则
        原码是机器数中最简单的一种表示形式,符号位为 0 表示正数,符号位为 1 表示负数,数值位即真值的绝对值,故原码表示又称为带符号的绝对值表示。原码的引入使得计算机可以用编码方式来表示正数和负数。
        例如:对于真值 -11 (-1011B),若用 8 位原码表示,则其机器数为 1000 1011B (8BH);对于真值 -0.25 (-0.01B),若用 8 位原码表示,则其机器数为 1010 0000B (A0H)。
② 原码整数的表示范围
        若机器字长为n+1,则原码整数的表示范围为−(2^n −1)∼2^n −1(关于原点对称)。
③ 机器数零的原码表示
零的原码表示有正零和负零两种形式。例如,对于 8 位机器数,同时存在[+0]原=0000 0000B和[-0]原=1000 0000B。
        提示:原码的优点是其与真值的关系直观,因此可以方便与真值进行转换,用原码实现乘除运算也比较简便。其缺点是原码加减运算规则复杂。现代计算机不用原码表示整数,只用定点原码小数来表示浮点数的尾数。考生只需熟练掌握十进制数和原码的互相转换即可。
(2) 反码
① 反码的引入与编码规则
        在原码基础上,若符号位为 1(负数),则将数值位逐位翻转;若符号位为 0(正数),则不予改动。按此规则便得到反码。反码与原码满足一一映射的关系。
② 反码整数的表示范围
        若机器字长为n+1,则反码整数的表示范围同样为
③ 机器数零的反码表示
        反码同样有正零和负零的概念。例如,对于 8 位机器数,同时存在。反码的 -0 在格式上与原码不同。
        提示:反码在计算机中很少使用,408 真题中从未直接出现关于反码的题目,考生简单了解反码即可。
(3) 补码
① 补码的引入与编码规则
        人类为了在计算机中实现加减运算的统一,即用加法来实现减法运算,提出了补码表示法。补码表示方法为:正数的补码即为其原码;负数的补码等于模(n 位补码的模为2^n)与该负数绝对值之差。

6.下列有关补码的描述中,正确的是( )。
I. 在计算机中用来表示无符号数
II. 零的表示形式唯一
III. 符号位和数值位一起参与运算
IV. 实现了加减法的统一
V. 机器数的大小可以直观反映真值的大小
A. 仅 I、III、V
B. 仅 I、II、III
C. 仅 II、III、IV
D. 仅 I、II 和 V

6.【参考答案】C
【解析】补码通常用来编码有符号数,无符号数采用传统的二进制编码即可,I 错误;补码零的表示形式唯一,为00⋯0,II 正确;补码的符号位可以和数值位一起参与运算,III 正确;补码的编码特性使其实实现了加减法的统一,加减法可以在一套电路中进行,IV 正确;机器数按无符号比较的大小可以反映真值的大小,这是移码的特性,V 错误。

        【提示】在做题中,一般不采用上述方法求补码,而使用以下方法:对于任一正整数,其补码和原码完全相同;对于任一负整数,其补码的符号位和原码一样(为 “1”),数值位是其对应原码的数值位每位求反后,末位再加 1。
        例如:对于真值 +11(1011B),若用 8 位补码表示,则其机器数为 0000 1011B (0BH);对于真值 -11 (-1011B),若用 8 位补码表示,先计算其原码为 1000 1011B,再得出补码为 1111 0101B (F5H)。
② 补码整数的表示范围
        对于n+1位补码表示的整数,当符号位为 0 时表示非负数,可表示范围为0∼2^n −1;当符号位为 1 时表示负数,可表示范围为−2^n∼−1。所以,n+1补码整数的表示范围为−2^n∼2^n −1,比原码多表示−2^n这个数。例如,8 位补码整数的表示范围为−128∼127。

7.下列有关补码表示的一些常见二进制形式中,错误的是( )。
A. 补码表示 0 的二进制为 000・・・00
B. 补码表示 -1 的二进制为 111・・・11
C. 补码表示的最小整数的形式为 100・・・00
D. 补码表示的最大整数的形式为 111・・・11

7.【参考答案】D
【解析】n+1位补码表示的最大整数的形式为011⋯11,真值为2^n −1,D 的表述有误,选 D。考生应该熟练掌握这 4 种常见的补码二进制形式。

③ 机器数零的补码表示
        不同于原码和反码有正零和负零之分,补码的零只有一种表示方法,即符号位和数值位全为 “0” 表示机器数零。

8.下列关于 n 位补码和移码(偏置常数为2^n −1)的描述中,错误的是( )。
A. 两者有相同的表示范围
B. 两者对零的表示相同
C. 移码为补码的符号位取反
D. 移码通常表示浮点数的阶

8.【参考答案】B
【解析】在题目偏置值条件下,移码的机器零表示为100⋯0,而补码的机器零表示一直为000⋯0,所以选 B;因为在题设偏置值条件下,移码为补码表示的符号位取反,所以两者自然有相同的表示范围,A、C 描述正确;移码可以用来表示浮点数的阶码,D 描述正确。

        【提示】考生还需熟悉补码表示的一些常见二进制形式。例如:n+1位补码表示的最小整数−2^n的二进制形式为100⋯0;表示的最大整数2^n −1的二进制形式为011⋯1;补码表示 -1 的二进制形式为111⋯1。
        在 408 考试中,如无其他说明,默认有符号整数的机器数用补码表示。例如,在 32 位机器中,对于 C 语言代码 “int x = -6”,可知 x 在计算机中使用 32 位补码表示,且机器数为 FFFFFFFAH。

(4) 移码
① 移码的引入与编码规则
        在真值的基础上加上一个偏置值,可以得到移码。n+1位移码的偏置值通常取2^n或2^n −1 。当偏置值为2^n时,则在补码的基础上,对符号位取反即得移码;偏置值为2^n −1的移码通常用来表示浮点数的整数部分。移码只用来表示定点整数
② 移码整数的表示范围
        对于n+1位移码,当偏置值为2^n时,表示范围为−2^n∼2^n −1 。例如:8 位移码表示的最小整数
③ 机器数零的移码表示

        移码由于偏置值的存在,使其可以按无符号数比较的大小反映真值的相对大小,这是移码的特性。例如: -11 的补码为 1111 0101B,符号位取反得到移码为 0111 0101B。同理 98 的补码为 0110 0010B,移码为 1110 0010B。按无符号数的比较规则有01110101B<11100010B,可以反映出真值−11<98。
假设编码字长为n+1位,移码偏置值为2^n,对于四种编码方式的总结如表 2.4 所示:

(5) 真值、原码和补码的互相转换
        考生在备考中,需要熟练掌握补码和其真值的互相转换,真值以十进制给出,在转换中可以借助原码。对于负数,补码转换为原码和原码转换为补码均采用 “符号位不变,数值位取反再加 1” 的方法;对于正数,其原码和补码表示完全相同。原码和真值的转换使用二进制和十进制的互相转换方法即可。下面举例说明如何实现补码和真值的互相转换。

        提示:负数的原码和补码之间的转换还可以使用比较快捷的技巧,右起找第一个 “1”,将其左边所有数值位取反即可。
        提示:一般 408 考试题干会告诉考生机器字长,考生应该了解 C 语言在 32 位机器上规定 short 占 16 位,int 占 32 位,float 占 32 位,double 占 64 位。部分题干不会直接告诉考生以上内容,需要考生当做常识记忆,请牢记表 2.5。

表 2.5 基本C数据类型所占位数

C 声明

机器字长

带符号

无符号

32 位

64 位

char

unsigned char

1B

1B

short

unsigned short

2B

2B

int

unsigned int

4B

4B

long

unsigned long

4B

8B

float

-

4B

4B

double

-

8B

8B

(6) 原码、反码、补码和移码的小数
        小数表示与整数表示的原理类似。例如:机器字长为 8 位,若x=+0.1101,则 x 的原码、反码、补码和移码的表示分别为:0.1101000、0.1101000、0.1101000 和 1.1101000;若x=−0.1101,则 x 的原码、反码、补码和移码的表示分别为:1.1101000、1.0010111、1.0011000 和 0.0011000。

2.1.3 习题精编

1.引入八进制和十六进制的目的是( )。
A. 节约元器件
B. 可以表示更大范围的数
C. 比二进制运算速度快
D. 便于表示和阅读二进制

1.【参考答案】D
【解析】十六进制和八进制是二进制的等价表示,计算机使用二进制表示数据,十六进制和八进制只是为了方便人们表示、阅读二进制。

2.107 对应的二进制和十六进制形式是( )。
A. 1101010B、6BH
B. 1101011B、6BH
C. 1101100B、6CH
D. 1101101B、6DH

2.【参考答案】B
【解析】107=6×16+11,所以107=6BH,将6BH化为二进制为01101011B。

3.(35A98127)16​+(B612AC85)16​=( )。
A. (17745552242)8​
B. (35357026654)8​
C. (36210512022)8​
D. (37745552242)8​

3.【参考答案】B
【解析】十六进制加法与十进制加法类似,不同的是逢 16 进 1。得到十六进制后,通过二进制桥梁,再转换为八进制。(35A98127)16​+(B612AC85)16​=(EBBC2DAC)16​=

(35357026654)8​。

4.下列各种进位计数制的数中,最小的数是( )。
A. (10010111)2​
B. (77)8​
C. (107)10​
D. (3E)16​

4.【参考答案】D
【解析】(10010111)2​=97H=151,(77)8​=56+7=63,(3E)16​=62。

5.下列关于原码、补码、移码的叙述中,正确的是( )。
A. 计算机使用原码实现加减法
B. 计算机用补码对有符号整数编码
C. 移码通常用来表示浮点数的尾数
D. 原码通常用来表示浮点数的阶

5.【参考答案】B
【解析】计算机常用补码表示有符号数,以实现加减法的统一,A 错误,B 正确;浮点数的尾数可以用原码和补码表示,在 IEEE 754 标准中,采用原码表示浮点数尾数,C 错误;浮点数的阶通常采用移码表示,D 错误。

6.下列有关补码的描述中,正确的是( )。
I. 在计算机中用来表示无符号数
II. 零的表示形式唯一
III. 符号位和数值位一起参与运算
IV. 实现了加减法的统一
V. 机器数的大小可以直观反映真值的大小
A. 仅 I、III、V
B. 仅 I、II、III
C. 仅 II、III、IV
D. 仅 I、II 和 V

6.【参考答案】C
【解析】补码通常用来编码有符号数,无符号数采用传统的二进制编码即可,I 错误;补码零的表示形式唯一,为00⋯0,II 正确;补码的符号位可以和数值位一起参与运算,III 正确;补码的编码特性使其实实现了加减法的统一,加减法可以在一套电路中进行,IV 正确;机器数按无符号比较的大小可以反映真值的大小,这是移码的特性,V 错误。

7.下列有关补码表示的一些常见二进制形式中,错误的是( )。
A. 补码表示 0 的二进制为 000・・・00
B. 补码表示 -1 的二进制为 111・・・11
C. 补码表示的最小整数的形式为 100・・・00
D. 补码表示的最大整数的形式为 111・・・11

7.【参考答案】D
【解析】n+1位补码表示的最大整数的形式为011⋯11,真值为2的n次方−1,D 的表述有误,选 D。考生应该熟练掌握这 4 种常见的补码二进制形式。

8.下列关于 n 位补码和移码(偏置常数为2的n−1次方)的描述中,错误的是( )。
A. 两者有相同的表示范围
B. 两者对零的表示相同
C. 移码为补码的符号位取反
D. 移码通常表示浮点数的阶

8.【参考答案】B
【解析】在题目偏置值条件下,移码的机器零表示为100⋯0,而补码的机器零表示一直为000⋯0,所以选 B;因为在题设偏置值条件下,移码为补码表示的符号位取反,所以两者自然有相同的表示范围,A、C 描述正确;移码可以用来表示浮点数的阶码,D 描述正确。

9.数 X 在计算机中的机器数为 1000 1000,若X=−01111000B,则 X 的编码方式为( )。
A. 原码
B. 补码
C. 反码
D. 移码

9.【参考答案】B
【解析】X 的原码为11111000B,转换为补码为10001000B,所以可知 X 的编码方式为补码。

10.【参考答案】D
【解析】本题考查了常见的编码转换,对于原补互转,需要知道正数的原补码相同;负数的规则为:“符号位不变,数值位取反加 1”。所以 A 描述正确,11011110为负数,按此规则取反为10100001,加 1 为10100010,B 描述正确。对于求相反数的补码,需要知道无论是正数还是负数,规则均为:“全部位取反,末位加 1”,C 选项描述正确。D 选项按此规则取反为00100001,再加 1 为为00100010,选 D。

11.【参考答案】D
【解析】A 选项原码符号为负数,数值位绝对值为00101101B=2DH=32+13=45,所以真值为−45;对于 B 选项,转换为原码为1010010B,真值为−18;对于 C 选项,转换为原码为1010011B,真值为−19;对于 D 选项,移码值为1101101B=64+32+13=109,若偏置值为64,则真值为45;若偏置值为63,真值为46。所以 D 选项的真值最大。

12.完成以下进制转换:
(1) (37.375)10​=( )2​=( )8​=( )16​
(2) (127.8125)10​=( )2​=( )8​=( )16​
(3) (1011011.1011)2​=( )10​=( )8​=( )16​
(4) (AB.C)16​=( )2​=( )10​=( )8​

12.【参考答案】
(1) (37.375)10​=(100101.011)2​=(45.3)8​=(25.6)16​
(2) (127.8125)10​=(1111111.1101)2​=(177.64)8​=(7F.D)16​
(3) (1011011.1011)2​=(91.6875)10​=(133.54)8​=(5B.B)16​
(4) (AB.C)16​=(10101011.11)2​=(171.75)10​=(253.6)8​

13.使用十六进制会给数的表示和运算带来方便。类比十进制加减法,利用十六进制完成以下算术题。(提示:加减法规则不变,只需将基数改成 16 即可)
(1) 503CH+40H=( )H
(2) 503CH+10000111B=( )H
(3) 503CH−128=( )H
(4) 602DH−503CH=( )H

13.【参考答案】
(1) 503CH+40H=(507CH)
(2) 503CH+10000111B=503CH+87H=(50C3H)
(3) 503CH−128=503CH−80H=(4FBCH)
(4) 602DH−503CH=(FF1H)

14.用二进制表示下列无符号整数至少需要几位?
107,511,1000,1024,65535

15.用补码表示下列有符号整数至少需要几位?
-107,+511,+1000,-1024,-65536,+65535

14.【参考答案】
用二进制对无符号数进行编码时,所有二进制位均是有效数值位,所以n位二进位表示无符号整数的范围为0∼2的n次方−1。
(1) 2^6−1<107<2^7−1,所以至少需要 7 位。
(2) 511=2^9−1=11111111B,所以至少需要 9 位。
(3) 2^9−1<1000<2^10−1,所以至少需要 10 位。
(4) 2^10−1<1024<2^11−1,所以至少需要 11 位。
(5) 65535=2^16−1=1111111111111111B,所以至少需要 16 位。

2.1.4 真题演练

16.【2018】冯・诺依曼计算机中的数据采用二进制编码表示,其主要原因是( )。
I. 二进制的运算规则简单
II. 制造两个稳态的物理器件较容易
III. 便于用逻辑门电路实现算术运算
A. 仅 I、II
B. 仅 I、III
C. 仅 II、III
D. I、II 和 III

16.【参考答案】D
【解析】二进制只能取0,1两种数值,运算规则简单且易于转换,例如减法可以转换为加法、乘法可以转换为移位和加法,I 正确;二进制的两种数值刚好对应两种物理状态,具有两种稳态的物理器件更容易制造,II 正确;二进制的两种数值也可以对应两种逻辑量 “真” 和 “假”,所以利用逻辑门电路实现算术运算也较为方便,III 正确。所以本题答案为 D 选项。

2.2 整数表示和运算

2.2.1 无符号整数的表示和运算

        计算机中的数均存放在寄存器或内存中,一般寄存器的位数与机器字长相等。无符号数是指整个机器字长的全部二进制位均为数值位,没有符号位,相当于数的绝对值。由二进制和十进制的转换规则知,n位二进制可表示2^n个数,对应十进制的范围为0∼2^n −1,其中,n个 “0” 表示0,n个 “1” 表示2^n −1。例如,8位无符号整数的表示范围为0∼2^8 −1。在 C 语言中,只需在 int、short 等关键字前加 unsigned 即可定义一个无符号数。无符号数的运算可以参考下节有符号数的运算,即无符号数运算相当于有符号数的正数运算。

3.假设一个 16 位的寄存器,用于存放无符号整数,则它能存放的最大数是( )。
A. 65535
B. 65536
C. 32767
D. 32768

3.【参考答案】A
【解析】16 位寄存器存放无符号整数,则存放的最大值为全 1,即1111111111111111B,十进制表示为 65535。

        提示:当有符号数和无符号数一起参与计算时,编译器默认将有符号数转换为无符号数再参与运算,运算结果为无符号数。例如,对于以下 C 代码:

int x=-1;
unsigned int y=1;
unsigned int z=x+y;
unsigned int w=-3+y;

        在计算 “x+y” 时,先将有符号数x(int 定义的默认为有符号数)强制转换为无符号数(转换规则后面会讲解),再与y相加,结果z的类型为无符号数;在计算 “−3+y” 时,由于编译器会将整数常量默认为有符号的 int 类型(小数常量默认为 double 类型),计算机将会把 “−3” 转换为无符号数再进行计算,结果w的类型为无符号数。

2.2.2 有符号整数的表示和运算

1.有符号整数的表示

        计算机采用二进制计数法,只能用 “0” 和 “1” 进行编码,有符号数需要将其符号数字化,即 “0” 表示正号,“1” 表示负号。4 种有符号数的表示方法(原码、反码、补码、移码)在前文 2.1.2 定点数的编码表示中有具体讲解。

2.移位运算

        移位运算对计算机来说有很大的实用价值。例如,当某计算机没有乘(除)法运算电路时,可以采用移位和加法相结合的方法,来实现乘(除)运算。对于任意二进制数,有以下结论:无论其是无符号数还是有符号数(包括原码、反码、补码和移码),将其相对于小数点做n位左移或者右移时,相当于该数乘以或除以2^n。由于计算机中的机器字长都是固定的,当机器数左移或者右移时,都会使其低n位或高n位出现空缺,因此对于空缺部分需要补充(补1或0)。
常考的移位运算为逻辑移位和算术移位
(1) 逻辑移位
        逻辑移位不考虑符号位,即将操作数视为无符号数。逻辑移位的规则如下:逻辑左移时,低位补0,高位移出;逻辑右移时,高位补0,低位移出。对于无符号整数的逻辑左移,若高位的1被移出,则会发生溢出。例如,寄存器的内容为10001110,逻辑左移1位为00011100,对于无符号数来说发生溢出;逻辑右移1位为01000111。
(2) 算术移位
        算术移位需要考虑符号位(参考袁春风书籍的说法),即将操作数视为有符号数。由于计算机中有符号整数用补码表示,所以有符号整数的算术移位即为补码的算术移位,其规则为:算术左移时,低位补0,高位移出;算术右移时,高位补符号位,低位移出。
        由补码算术移位规则可知,算术移位应尽量保证符号位不变。所以若补码左移使得符号位发生改变,则发生溢出,例如8位补码10000011和01000011算术左移后均发生溢出。

3. 原码加减运算

        在原码加/减运算中,将符号位与数值位分开运算。具体来说,需要先判断两操作数的符号,对于加法运算,遵循 “同号求和,异号求差” 的规则;对于减法运算,遵循 “同号求差,异号求和” 的规则。
        由上述规则可知,求和时,直接对数值位进行相加,符号位取被加数的符号即可完成求和,若最高数值位产生进位,结果溢出。求差时,需要将减数的数值位转换为补码,再与被减数的数值位相加。若最高数值位产生进位,则所得数值位正确,结果取被减数的符号。若最高数值位未产生进位,表明结果为负,此时要将结果数值位的补码形式还原为绝对值形式,符号位为被减数的符号位取反。
        提示:原码加减法由于符号位与数值位分开运算,且运算规则较为复杂,因此计算机采用的大多是补码加减运算。IEEE 754 格式的浮点数尾数采用原码表示,所以原码加减法主要应用在浮点数运算中。

4. 补码加减运算

        若两个补码表示的n+1位定点整数(其中x0​为符号位,x1​∼xn​是数值的有效部分),(其中y0​为符号位,y1​∼yn​是数值的有效部分),则补码加减法计算规则如下:
(1) 补码加法
        两个数的补码相加,符号位参加运算,且两数和的补码等于两数的补码之和,公式如 2.2 所示(机器字长为n+1位)。

        计算时不需要事先判断符号,符号位与数值位一起参加运算。符号位相加后若有进位,则舍去该进位数字。
(2) 补码减法
        对于减法,因X−Y=X+(−Y),则,由补码加法基本公式可得式 2.3(机器字长为n+1位)。

        因此若机器数采用补码表示,当求X−Y时,只需先求,再按补码加法规则进行运算。
        提示:[-Y]补由[Y]补连同符号位在内,每位取反,末位加1而得。例如+7的补码为00000111B,每位取反得11111000B,末位加1得11111001B,所以−7的补码为11111001B。
        这个规则当Y=−2的n−1次方(n位补码)时失效,例如−128的8位补码为10000000B,按此规则得128的补码为10000000B,但这显然是不正确的。这是因为n位补码不能表示2的n−1次方。补码由于表示范围的不对称,存在很多这样的小 bug。但是需要注意的是,在不溢出的情况下,按此规则计算补码减法仍然正确。例如−7−

(−128)=11111001B+10000000B=01111001B=121,结果仍然正确。这体现了按此规则计算补码减法的通用性。

5. 溢出概念和判别方法

        溢出是指运算结果超出机器数的表示范围。关于溢出有如下结论:两个异号数相加或两个同号数相减,不会溢出;两个同号数相加或两个异号数相减,有可能溢出。只考虑有符号数,在计算机中,补码定点数加减运算常用的溢出判断方法有以下3种。
(1) 判断结果与操作数符号是否相等
        减法运算在计算机中是用加法器实现的,因此无论是加法还是减法,若送至加法器的两个操作数的符号相同,结果又与原操作数的符号不同,则表示结果溢出,否则未发生溢出。

(2) 判断最高位进位和次高位进位是否相同
        若符号位(最高位)的进位与最高数位(次高位)的进位相同,则说明没有溢出,否则表示发生溢出。
        假设符号位的进位为C1​,最高数位的进位为C2​,若OF=1表示溢出,则逻辑表达式为OF=C1​⊕C2​。
(3) 采用双符号位判断
        双符号位的补码也称模4补码。运算结果的两个符号位K1​K2​相同,表示未溢出;运算结果的两个符号位K1​K2​不同,表示溢出,此时最高位符号位代表真正的符号。
符号位K1​K2​的各种情况如下:
① K1​K2​=00:表示结果为正数,没有发生溢出。
② K1​K2​=01:表示结果为正溢出。
③ K1​K2​=10:表示结果为负溢出。
④ K1​K2​=11:表示结果为负数,没有发生溢出。
下举一例具体说明上述三种溢出判断方法:

        答:根据上面的溢出判断方法可知,只有正数加正数或者负数加负数才可能发生溢出。对于第一问,x、y的符号位表明它们是异号的,所以不会发生溢出。考生也可以自行通过符号位和最高数值位进位是否相同来判断是否溢出。
        对于第二问,x、y的符号位相同。在8位机器中,x+y=01001111B,运算结果的符号与操作数符号不同,发生溢出,可以理解为以下情况:两个负数相加却得到了一个正数,其结果溢出;x+y的运算中,最高数值位的进位为0,符号位的进位为1,所以通过符号位进位和最高数值位的进位也可以判断结果溢出。
        若采用双符号位分析第二问的溢出情况,则

,x+y=10,1001111B,符号位为 “10”,表示发生了负溢出,即结果真值应该是负数,运算结果却是正数。
        提示:本小节着重介绍了有符号数的溢出判断,其实无符号数加减法也会发生溢出。无符号数溢出可以通过 CF 标志位判断。当 CF 标志位等于1,即最高位向更高位产生进位值时无符号数加减法溢出。具体来说:当无符号数加法运算最高位产生进位、或无符号数减法运算最高位产生借位时,结果溢出。例如机器字长为8位,11000111B+11001000B和11000111B−11001000B均是无符号数发生溢出的情况。

2.2.3 无符号整数和有符号整数的位权

        前面在介绍任意进制转换为十进制时,提到可以使用公式将任意进制数的每一位与它对应的权值相乘再相加来进行转换,这里的r^i即为位权。现代计算机都将整数分为有符号整数和无符号整数并进行编码,下面将进一步介绍无符号整数和有符号整数的位权,以帮助考生从位权的角度更深入理解计算机的二进制编码。


        当n位补码的符号位设置为0,其他位全部设置为1时,考虑补码位权可知,此时清除了负权,而保留了所有的正权,这种情况n位补码取得最大值2的n−1次方−1,对应的二进制编码为[01⋯1]。
扩展:前面提到有符号数除了补码还有原码和反码两种标准的表示方法。对于这两种编码的位权简要介绍为:原码的最高位用来决定其余各位权值的正负。符号位若为正,数值位则全为正权;符号位若为负,数值位则全为负权。n位反码的符号位权值为−(2的n−1次方−1)而不是−2的n−1次方,其余位的权值与补码相同。

2.2.4 习题精编

1.假设寄存器有 8 位,(−46)10​以补码形式存放,其中符号位占一位,则存放在寄存器中的内容为( )。
A. 46H
B. B2H
C. D2H
D. AEH

1.【参考答案】C
【解析】(−46)10​以补码形式存放,将(−46)10​先转换为二进制原码10101110B,补码为原码符号位不动,其余位取反加 1,即补码为11010010B,转换为十六进制为D2H。

2.若定点整数有 64 位,含 1 位符号位,补码表示,则所能表示的绝对值最大的负数是( )。
A. −2^64
B. −2^63
C. −(2^64−1)
D. −(2^63−1)

2.【参考答案】B
【解析】对于长度为n+1(含一位符号位)的定点整数x,用补码表示时,其所能表示的最小整数(绝对值最大的负数)为−2^n,本题n=63,故能表示的绝对值最大的负数为−2^63。
拓展:本题若改成所能表示的绝对值最大的数,答案仍不变。这是因为 64 位补码所能表示的最大正数为2^63−1。

3.假设一个 16 位的寄存器,用于存放无符号整数,则它能存放的最大数是( )。
A. 65535
B. 65536
C. 32767
D. 32768

3.【参考答案】A
【解析】16 位寄存器存放无符号整数,则存放的最大值为全 1,即1111111111111111B,十进制表示为 65535。

4.假设一个 16 位的寄存器,用于存放补码表示的定点整数,则它能存放的整数范围是( )。
A. −65535∼+65536
B. −65536∼+65535
C. −32768∼+32767
D. −32767∼+32768

4.【参考答案】C
【解析】若字长为n+1,则补码的表示范围为−2^n⩽x⩽2^n−1(比原码多表示−2^n),本题中n为 15,故表示范围为−32768∼+32767。

5.若用定点整数表示数据(−134)10​,并将其存入寄存器中,则寄存器至少要有( )位。
A. 8
B. 9
C. 10
D. 16

5.【参考答案】B
【解析】(−134)10​转换成二进制为−10000110B,需要 8 位来保存数值位,还需要 1 位来保存数符位,故至少需要 9 位。

6.整数x的机器数为C007H,下列说法中错误的是( )。
A. 逻辑左移一位的机器数为800EH
B. 逻辑右移一位的机器数为6003H
C. 算术左移一位的机器数为8003H
D. 算术右移一位的机器数位E003H

6.【参考答案】C
【解析】x的机器数为C007H,转换成二进制为1100000000000111B。逻辑移位不管左移还是右移,都填0;算术移位的对象是有符号数,在移位过程中符号位参与移位,机器数采用补码形式,左移填0,右移填符号位。

逻辑左移一位的二进制为1000000000001110B,即800EH,A 描述正确。

逻辑右移一位的二进制为0110000000000011B,即6003H,B 描述正确。

算术左移一位的二进制为1000000000001110B,即800EH,C 描述错误,当选。

算术右移一位的二进制为1110000000000011B,即E003H,D 描述正确。

7.关于补码右移,说法正确的是( )。
A. 定点数右移 1bit,最高位用 0 补充
B. 定点数右移 1bit,最高位用 1 补充
C. 定点数右移 1bit,最高位用原最低位补充
D. 定点数右移 1bit,最高位用原符号位补充

7.【参考答案】D

【解析】补码右移时,定点数右移一位,若为正数则最高位补0,若为负数则最高位补1,也就是最高位用符号位补充。
拓展:本题 D 选项是补码右移的总结性结论,考生需理解并牢记,该结论对正数和负数都适用。对于补码左移,要注意溢出问题,在机器层面,补码左移与逻辑左移处理方式一致,都是低位补0,高位移出,若移出后补码符号位改变,就会发生溢出。

8.设机器字长为 8 位,


A. 10100110
B. 01000110
C. 负溢出、出错
D. 正溢出、出错

9.两个有符号整数A、B用 8 位补码表示。已知A=92,B=−51,则A−B的机器数和溢出标志OF分别为( )。
A. 29H、0
B. 29H、1
C. 8FH、0
D. 8FH、1

10.某计算机字长为 8 位,带符号整数A和B用补码表示。已知,则4A+B/2的机器数为( )。
A. E7H
B. BAH
C. 7FH
D. DBH

11.在某 8 位计算机中,两个带符号整数变量x、y的机器数分别为34H、2DH,则x−2y的机器数以及溢出标志OF分别是( )。
A. 8EH、0
B. 8EH、1
C. DAH、0
D. DAH、1

12.在某 8 位计算机中,两个带符号整数变量x、y的机器数分别为34H、CDH,则x/2+2y的机器数以及溢出标志OF分别是( )。
A. B4H、0
B. B4H、1
C. A4H、0
D. A4H、1

12.【参考答案】A
【解析】x=34H=00110100B,y=CDH=11001101B ,则x/2=00011010B,2y=10011010B 。x/2+2y=00011010B+10011010B=10110100B,即B4H 。最后一步加法是正数加负数,结果不会产生溢出,溢出标志OF=0 。

13.在某 8 位计算机中,两个带符号整数变量r1​、r2​的机器数分别为F4H、E4H,则下列运算中会发生溢出的是( )。
A. r1​+r2​
B. r1​−r2​
C. r1​×r2​
D. r1​/r2​

14.在补码定点加法运算中,若采用一位符号位,则当( )时,表示结果溢出。
A. 符号位产生进位
B. 符号位进位和最高数值位进位异或结果为 0
C. 符号位为 1
D. 符号位进位和最高数值位进位异或结果为 1

14.【参考答案】D
【解析】采用一位符号位可以根据数据位的进位情况来判断溢出,若符号位的进位C1​与最高数位的进位C2​相同,则说明没有溢出,否则表示发生溢出。溢出的逻辑判断表达式为V=C1​⊕C2​,若V=0,则表示无溢出;V=1,则表示溢出。

15.运算器中判断补码加减法运算结果是否溢出时,可采用判断进位的方式,在符号位的进位为C0​,最高数值位进位为C1​时,结果溢出的判定方法是( )。
A. C0​产生进位
B. C1​产生进位
C. C0​C1​都同时产生进位
D. C0​C1​中仅有一个产生进位

15.【参考答案】D
【解析】采用一位符号位根据数据位的进位情况来判断溢出时,当最高数值位和符号位进位不同时产生溢出。具体来说,两正数相加,当最高有效位产生进位(C2​=1),而符号位不产生进位(C1​=0)时,发生正溢出;两负数相加,当最高有效位不产生进位(C2​=0),而符号位产生进位(C1​=1)时,发生负溢出,若符号位的进位C1​与最高数位的进位C2​相同,则说明没有溢出,否则表示发生溢出。溢出的逻辑判断表达式为V=C1​⊕C2​,若V=0,则表示无溢出;V=1,则表示溢出。

16.若采用双符号位补码运算,运算结果的符号位为 01,则( )。
A. 产生了负溢出(下溢)
B. 产生了正溢出(上溢)
C. 结果正确,为正数
D. 结果正确,为负数

16.【参考答案】B
【解析】双符号位补码运算,符号高位是数位,0 表示正数,1 表示负数,若符号位为 00 或 11,则表示无溢出;若运算结果的双符号位为 10,则表示负溢出;若运算结果的双符号位为 01,则表示正溢出。

17.机器运算发生溢出的根本原因是( )。
A. 寄存器的位数有限
B. 运算中将符号位的进位丢弃
C. 运算中将符号位的借位丢弃
D. 数据运算中发生错误

17.【参考答案】A
【解析】机器运算发生溢出的根本原因是寄存器的位数有限,保存不下超过其位数的数值,只能将高位丢弃,导致溢出。选项 A 正确。

18.一个 8 位的二进制整数由 2 个 “0” 和 6 个 “1” 组成,采用补码或者移码表示,则下列说法中正确的是( )。
A. 若采用移码表示,偏置值为 127,则此整数最小为 -64
B. 若采用移码表示,偏置值为 128,则此整数最大为 123
C. 若采用补码表示,则此整数最小为 -96
D. 若采用补码表示,则此整数最大为 252

18.【参考答案】A
【解析】2 个 “0” 和 6 个 “1” 组成的 8 位二进制整数中,若用补码表示,要使得数值最大,符号位必须为 0,并且将 “1” 置于高位上,则补码最大为 0111 1110B = 126,故 D 错误;补码表示的最小值,符号位应是 1,因为补码变原码要取反,故其余的 1 应放在低位上,则补码最小为 1001 1111B = -97,故 C 错误;若采用移码表示,偏置值为 128,要使整数最大则 1 应放置在高位,即 1111 1100B - 1000 0000B = 252 - 128 = 124,故 B 错误;若采用移码表示,偏置值为 127,要使整数最小则 1 应放置在低位,即 0011 1111B - 0111 1111B = 1100 0000B = -64,则 A 正确。
提示:题设补码表示的最小整数也可以通过位权来解释,将 5 个 1 放在最低位上,剩下的 1 放在符号位上(唯一的负权),此时为最小整数。

19.设,xi​取 0 或 1,若要x>−32,应该满足条件( )。
A. x1​为 0,其他各位任意
B. x1​为 1,x2​x3​x4​x5​x6​中至少有一个为 1
C. x1​为 1,其他各位任意
D. x1​为 0,x2​x3​x4​x5​x6​中至少有一个为 1

20.【参考答案】
(1) x为补码小数,其最高位(符号位)的位权为 -1,当x1​=0、x2​=1、其他位为 0 时,其值为−1+0.25=−0.75。所以若x<(−0.75),则x1​=0、x2​=0,其余位任意。
(2) x为补码整数,有 5 位,所以其最高位(符号位)的位权为 -16,当x1​=1、其余位为 0 时,其值为−16+8=−8。所以若x>−8,则x1​=1、其余位至少有 1 位为 1。
提示:本题旨在提醒考生:采用位权分析补码有时可以起到更简单、更直观的效果。

21.利用补码位权回答以下问题:
(1) 利用位权写出补码[1011]、[11011]、[111011]的展开式和真值。
(2) 从位权的角度简述为何补码符号扩展后不影响真值。

22.某一个 8 位的计算机,数据以补码形式表示,并且机器数含 1 位符号位,现有整数x、y、z,其中,请分别求x−2y的机器数和x/4+2z的机器数,并指明计算结束后溢出标志OF的值。

2.2.5 真题演练

23.【2010】假定有 4 个整数用 8 位补码分别表示:r1​=FEH、r2​=F2H、r3​=90H、r4​=F8H,若将运算结果存放在一个 8 位寄存器中,则下列运算发生溢出的是( )。
A. r1​×r2​
B. r2​×r3​
C. r1​×r4​
D. r2​×r4​

23.【参考答案】B
【解析】本题不应该采用补码乘法规则计算,应该使用补码范围计算。8 位补码所能表示的整数范围为 -128 ~ 127。将 4 个数全部转换为十进制数:r1​=−2、r2​=−14、r3​=−112、r4​=−8,经计算得r2​×r3​=1568>127,显然溢出。

24.【参考答案】A
【解析】计算机中的移位运算相当于对数据进行乘或除以 2 的整数倍。2x相当于将x算术左移一位,结果为 11101000;y/2相当于将y算术右移一位,结果为 11011000。上述移位均无溢出或丢失精度。补码相加为11101000+11011000=11000000,无溢出,选 A。

25.【2014】若x=103,y=−25,则下列表达式采用 8 位定点补码运算时,会发生溢出的是( )。
A. x+y
B. −x+y
C. x−y
D. −x−y

25.【参考答案】C
【解析】本题可以先将四个算术表达式的真值算出,再通过补码范围判断溢出。x+y=78,−x+y=−128,x−y=128,−x−y=−78。8 位定点补码表示的数据范围为 -128 ~ 127,显然 128 超过该范围,选 C。

26.【2015】由 3 个 “1” 和 5 个 “0” 组成的 8 位二进制补码,能表示的最小整数是( )。
A. −126
B. −125
C. −32
D. −3

26.【参考答案】B
【解析】表示最小数,即为负数,需要取一个 “1” 做为符号位,由于负数补码和原码转换规则为 “符号位不变,数值位取反,末位加 1”,要使得该数绝对值最大,因此补码为 “1000 0011”,转换为原码为 “1111 1101”,对应真值为 -125,选 B。
提示:本题也可以通过补码位权进行解释。由于补码符号位为负权,其他位为正权,所以当符号位为 1,最低两位为 1 时真值最小。对应的真值为−128+3=−125。

27.【2018】假定有符号整数采用补码表示,若 int 型变量x和y的机器数分别是FFFFFDFH和00000041H,则x、y的值及x−y的机器数分别是( )。
A. x=−65,y=41,x−y的机器数溢出
B. x=−33,y=65,x−y的机器数为FFFFFF9DH
C. x=−33,y=65,x−y的机器数为FFFFFF9EH
D. x=−65,y=41,x−y的机器数为FFFFFF96H

27.【参考答案】C
【解析】补码负数转换成原码的规则为:符号位不变,数值位取反末位再加 1。
x的二进制补码为 1111 1111 1111 1111 1111 1111 1101 1111B;
x的二进制原码为 1000 0000 0000 0000 0000 0000 0010 0001B,则x=−33。
y的二进制补码为 0000 0000 0000 0000 0000 0000 0100 0001B;
y的二进制原码为 0000 0000 0000 0000 0000 0000 0100 0001B,则y=65;
将x−y=−98转换为 16 进制补码形式为 FFFF FF9EH。
提示:本题也可以使用补码位权分析真值。去除补码符号扩展的部分,则x为 101 1111B,x的真值为−64+16+15=−33。y为 0100 0001B,y的真值为64+1=65。

28.【2018】整数x的机器数为11011000,分别对x进行逻辑右移 1 位和算术右移 1 位操作,得到的机器数各是( )。
A. 11101100、11101100
B. 01101100、11101100
C. 11101100、01101100
D. 01101100、01101100

28.【参考答案】B
【解析】逻辑移位时,所有数字参与移动,需要填充时,左移和右移空位都补 0;补码算术移位时,右移空位补符号号位,左移空位补 0。B 选项正确。

29.【2021】已知带符号整数用补码表示,变量x,y,z的机器数分别为FFFDH,FFDFH,7FFCH,下列结论中,正确的是( )。
A. 若x,y和z为无符号整数,则z<x<y
B. 若x,y和z为无符号整数,则x<y<z
C. 若x,y和z为带符号整数,则x<y<z
D. 若x,y和z为带符号整数,则y<x<z

29.【参考答案】D
【解析】x的二进制表示为 1111 1111 1111 1101B;y的二进制表示为 1111 1111 1101 1111B;的二进制表示为 0111 1111 1111 1100B。若x、y和z均为无符号整数且x>y>z,A 和 B 错误。若x、y和z均为带符号整数,补码的最高位是符号位,0 表示正数,1 表示负数,因此x和y为负数,z为正数,则z>x,z>y。对于x和y的比较,x对应原码为 1000 0000 0000 0011B,y对应原码为 1000 0000 0010 0001B,显然,x>y,所以y<x<z。提示:本题也可以使用如下结论,当补码符号位相同时,数值位越大,其对应的真值越大。所以x,y,z为带符号整数时,有y<x。又因为z为正数,有y<x<z。该结论在计算机组成原理复习全书的第 2 章章末总结进行详细说明。

相关文章:

  • upload-labs通关笔记-第15关 文件上传之getimagesize绕过(图片马)
  • DeepSeek源码解构:从MoE架构到MLA的工程化实现
  • Ajax研究
  • 山东大学高级程序设计期末复习
  • 【C++】从零认识C++的“继承”
  • Flink-Yarn运行模式
  • C++ 中,派生类什么时候可以不定义构造函数,什么时候必须定义构造函数?
  • Flink 核心概念解析:流数据、并行处理与状态
  • TDengine 运维—容量规划
  • leetcode 25. Reverse Nodes in k-Group
  • 鸿蒙HarmonyOS最新的组件间通信的装饰器与状态组件详解
  • SpringMVC 通过ajax 实现文件的上传
  • 关于光谱相机的灵敏度
  • naive-ui切换主题
  • 实验分享|基于千眼狼sCMOS科学相机的流式细胞仪细胞核成像实验
  • 【marked与katex结合】渲染公式
  • Vue3 Element Plus el-table-column Sortable 排序失效
  • 2025最新obs31.0.x版本编译办法,windows系统
  • 数据湖和数据仓库的区别
  • ES的倒排索引和正排索引的区别及适用场景?为什么倒排索引适合全文搜索?
  • 域名分类网站/哈尔滨百度网站快速优化
  • 网站代码怎么做/今日新闻头条内容
  • 一元购网站建设流程/seo自学网免费
  • 长沙专业做网站的公司/浏览器下载
  • 企业做网站的/企业文化的重要性和意义
  • 温州网站建设推广服务/流量精灵