计算机组成原理——数据的表⽰与运⽤
进位记数制及其相互转换
⼗进制、⼆进制、⼋进制、⼗六进制
真值、机器数(原码、反码、补码)
字符与字符串的编码(⼩端和⼤端⽅式存储)
数据校验
奇偶校验、CRC冗余校验、海明校验
定点数的表⽰和运算
⽆符号数的表⽰,有符号数的表⽰
定点数的运算
移位、原码加/减、补码加/减、乘/除、溢出判别
浮点数的表⽰和运算
浮点:表⽰范围、IEEE754标准、浮点数加/减运算
ALU结构
串⾏加法器和并⾏加法器、ALU的功能和结构
2009
12.⼀个 C 语⾔程序在⼀台 32 位机器上运⾏。程序中定义了三个变量 xyz,其中 x 和 z 是 int型,y 为 short 型。当 x=127,y= -9 时,执⾏赋值语句z=x+y 后,xyz 的值分别是
A.X=0000007FH,y=FFF9H,z=00000076H
B.X=0000007FH,y=FFF9H,z=FFFF0076H
C.X=0000007FH,y=FFF7H,z=FFFF0076H
D.X=0000007FH,y=FFF7H,z=00000076H
答案:D
考点:整数的补码表⽰和补码加法。x和z是int型,占四个字节,y是short型占两个字节。
y=-9的⼆进制原码为1000 0000 0000 1001
补码=原码取反+1 为1111 1111 1111 0111 = (FFF7)16
⽽在进⾏x+y时,int型能够表⽰所有的short类型,所以现将short转为int再相加为118
13.浮点数加减运算过程⼀般包括对阶、尾数运算、规格化、舍⼊和判溢出等步骤。设浮点数的阶码和尾数均采⽤补码表⽰,且位数分别为 5 位和 7位(均含 2 位符号位)。若有两个数 X=27×29/32,Y=25×5/8,则⽤浮点加法计算 X+Y 的最终结果是
A.00111 1100010 B.00111 0100010
C.01000 0010001 D.发⽣溢出
答案:D 考点:浮点数加法运算双符号位法溢出判断根据题意,X可记为00,111;00,11101(分号前为阶码,分号后为尾数), Y可记为00,101;00,10100(20/32) (1)对阶,X、Y阶码相减,即00,111-00,101=00,111+11,0111=00,010,可知X的阶码⽐Y的价码⼤2,根据⼩阶向⼤阶看齐的原则,将Y的阶码加2,尾数右移2位,可得Y为00,111;00,00101; (2)尾数相加,即00,11101+00,00101=01,00010,尾数相加结果符号位为01,故需进⾏右规; (3)规格化,将尾数右移1位,阶码加1,得X+Y为01,000;00,10001,阶码符号位为01,说明发⽣溢出,故
选D。
2010
13.假定有4个整数⽤8位补码分别表⽰r1=FEH,r2=F2H,r3=90H,r4=F8H,若将运算结果存放在⼀个8位寄存器中,则下列运算会发⽣溢出的是()
A. r1 x r2
B. r2 x r3
C. r1 x r4
D. r2 x r4
答案:B
⽤补码表⽰时8位寄存器所能表⽰的整数范围为-128到+127。
r1=(15×16+14)-256=-2; r2=(15×16+2)-256=-14; r3=(9×16+0)-256=-112; r4=(15×16+8)-256=-8;则
r1×r2=28,r2×r3=1568,r1×r4=16,r2×r4=112,只有r2×r3结果溢出。
14.假定变量i,f,d数据类型分别为int, float, double(int⽤补码表⽰,float和double⽤IEEE754单精度和双精度浮点数据格式表⽰),已知
i=785,f=1.5678e3,d=1.5e100,若在32位机器中执⾏下列关系表达式,则结果为真的是()
(I) i==(int)(float)I
(II)f==(float)(int)f
(III)f==(float)(double)f
(IV)(d+f)-d==f
A. 仅I和II
B. 仅I和III
C. 仅II和III
D. 仅III和I
答案:B
考查不同精度的数在计算机中的表⽰⽅法及其相互装换。
在c++中为了尽量保证精度不丢失,⼀般会把低转化为⾼精度,⽐如char->int->float->double
由于(int)f=1,⼩数点后⾯4位丢失,故Ⅱ错。Ⅳ的计算过程是先将f转化为双精度浮点数据格式,然后进⾏加法运算,故(d+f)-d得到的结果为双精度浮点数据格式,⽽f为单精度浮点数据格式,故Ⅳ错。
(Ⅰ)i=(int)(float)i//i变成浮点数,不变;
(Ⅱ)f=(floal)(int)f//f变成整数时,精度变⼩;
(Ⅲ)f=(float)(double)f//f转为双精度,⼤⼩不变;
(Ⅳ)(d+f)-d=f//双精度值==单精度值,结果出错。
2011
13.float型数据通常⽤IEEE 754单精度浮点数格式表⽰。若编译器将float型变量x分配在⼀个32位浮点寄存器FR1中,且x = -8.25,则FR1的内容是A.C104 0000H B.C242 0000H
C.C184 0000H D.C1C2 0000H
答案:Ax=-8.25=(-1000.01)2﹦(-1.000 01×23)2阶码=E=e+127=130=(1000 0010)2,单精度浮点数格式: 1位数符,8位阶码(含阶符),23位尾数(格式化原码尾数的最⾼位恒为1,所以不在尾数中表⽰出来,计算时在尾数前⾯⾃动添加1)故FR1内容为:1 1000 0010 000 0100 0000 0000 0000 0000即1100 0001 0000 0100 0000 0000 0000 0000,即C1040000H43(11分)假定在⼀个8位字长的计算机中运⾏如下类C程序段:
unsigned int x = 134;
unsigned int y = 246;float型
int m = x;
int n = y;
unsigned int z1 = x–y;
unsigned int z2 = x+y;
int k1 = m–n;
int k2 = m+n;
若编译器编译时将8个8位寄存器R1 ~ R8分别分配给变量x、y、m、n、z1、z2、k1和k2。(提⽰:带符号整数⽤补码表⽰)
(1)执⾏上述程序段后,寄存器R1、R5和R6的内容分别是什么?(⽤⼗六进制表⽰)R1存储的是134,转换成⼆进制为1000 0110B,即86H。R5存储的是x-y的内容,x-y=-112,转换成⼆进制为1001 0000B(补码),即90H。
//x和y都是⽆符号整型,两数相减的过程是按照正常的相减⽅式的,如果看成有符号的整型,那么就是-20,存储的信息也和有符号整型存储的信息完全⼀致,但是这两者表⽰数据的⽅法不⼀样,这就导致了相同的信息表⽰出不同的数据,这⾥的112是有符号整型的说法罢了。
R6存储的是x+y的内容,x+y=380,转换成⼆进制为1 0111 1100B(前⾯的进位舍弃),即7CH。由于计算机字长为8位,所以⽆符号整数能表⽰的范围为0~255。⽽x+y=380,故溢出。
(2)执⾏上述程序段后,变量m和k1的值分别是多少?(⽤⼗进制表⽰)m⼆进制表⽰为1000 0110B,由于m是int型,所以最⾼位为符号位,所以可以得出m的原码为:1111 1010(对10000110除符号位取反加1)(负数的原码与补码之间的转换都是除符号位取反加⼀),即-122。同理n的⼆进制表⽰为1111 0110B,故n的原码为:1000 1010,转成⼗进制为-10。所以k1=-122-(-10)=-112.(3)上述程序段涉及带符号整数加/减、⽆符号整数加/减运算,这四种运算能否利⽤同⼀个加法器及辅助电路实现?简述理由。可以利⽤同⼀个加法器及辅助电路实现。因为⽆符号整数都是以补码形式存储,所以运算规则都是⼀样的。但是有⼀点需要考虑,由于⽆符号整数和有符号整数的表⽰范围是不⼀样的,所以需要设置不⼀样的溢出电路。(4)计算机内部如何判断带符号整数加/减运算的结果是否发⽣溢出?上述程序段中,哪些带符号整数运算语句的执⾏结果会发⽣溢出?三种⽅法可以判断溢出:双符号位、最⾼位进位、符号相同操作数的运算后与原操作数的符号不同则溢出。带符号整数只有k2会发⽣溢出。分析:8位带符号整数的补码取值范围为:-128~+127,⽽k2=m+n=-122-10=-132,超出范围,⽽k1=-112,在范围-128~+127之内。
2012
13.假定编译器规定 int 和 short 类型长度占 32 位和 16 位,执⾏下列 C 语⾔语句
unsigned short x = 65530;
unsigned int y = x;
得到 y 的机器数为
A. 0000 7FFA
B. 0000 FFFA
C. FFFF 7FFA
D. FFFF FFFA
答案:B考查:⽆符号数,零扩展x=65530,将其化为⼆进制 1111 1111 1111 1010,对应的16进制为FFFA,将其转化为32位的int为0000 FFFAH
14.float 类型(即 IEEE754 单精度浮点数格式)能表⽰的最⼤正整数是
A. 2126-2103
B. 2127-2104
C. 2127-2103
D.2128-2104
答案:D
考查: IEEE754 单精度浮点数格式
对于⼀个⾮0且不是⽆穷⼤的浮点数,其阶码实际值为-126~+127,对应移码1~254。
尾数的最⼤值为:111111共23位⼩数
取阶码127,即指数127。
那么,根据X = (-1) s ×(1.M)×2 E-127 ,有
最⼤值为 (1)2 ×2127 =(1+1-2-23) ×2 127 = (2-2 -23) ×2 127 =2128-2104
问题1:表⽰的为什么是正整数⽽不是⼩数?其实23位尾数是⽤来表⽰⼩数部分的,但是⽤阶码可以表⽰的指数是127,如果都⽤上是远⼤于⼩数部分的23位的。
问题2: 111111共23个1是怎么表⽰成1-2-23的呢?其实可以这样想如果给这个数加上⼀个000001那么就会变为1,⽽这个
0.000 (000001)
就是2-23 !
15.某计算机存储器按字节编址,采⽤⼩端⽅式存放数据。假定编译器规定 int 和 short 型长度分别为 32 位和 16 位,并且数据按边界对齐存储。某C 语⾔程序段如下:
struct{
int a;
char b;
short c;
} record;
record.a=273;
若 record 变量的⾸地址为 0Xc008,则地址0Xc008 中内容及 record.c 的地址分别为
A. 0x00、0xC00D C. 0x11、0xC00D
B. 0x00、0xC00E D. 0x11、0xC00E
答案:D
273=256+16+1=100010001B=0000 0111H⼩端:⾼地址存⾼半字/字节;低地址存低半字/字节
什么是数据按边界对齐存储?简单的说,对于int型⽽⾔,起始地址为4的倍数;对于char类型⽽⾔,起始地址为任意字节皆可;对于short类型⽽⾔,起始地址为2的倍数;对于结构体⽽⾔,起始地址结构体内类型最⼤的字节量的整数倍;0xC008 中内容:0x11,record.c的地址:0xC00E
2013
13、某数采⽤ IEEE 754 单精度浮点数格式表⽰为 C640 0000H,则该数的值是()
A. -1.5*213
B. -1.5*212
C. -0.5*213
D. -0.5*212
答案: A
⼆进制为:1 100 0110 0 100 0000 0000 0000 0000 0000符号位 1 负数阶码 140-127=13尾数 1.5
14.某字长为8位的计算机中,已知整型变量x、y的机器数分别为[x]补=11110100,[y]补=10110000。若整型变量 z=2*x+y/2,则 z 的机器数为
A. 1 1000000
B. 0 0100100
C. 1 0101010
D. 溢出
答案:A
解析:将 x 左移⼀位,得到 11101000
将 y 右移⼀位,得到 11011000
两数相加判断是否溢出可以使⽤双符号位法来判断,符号位和最⾼位进位都是1,不会造成溢出。
两个数的补码相加的机器数为 11000000
15.⽤海明码对长度为 8 位的数据进⾏检/纠错时,若能纠正⼀位错。则校验位数⾄少为
A. 2
B. 3
C. 4
D. 5
答案:C
考查:设校验位的位数为k,数据位的位数为n,应满⾜下述关系:2k≥n+k+1。n=8,当k=4时,24(=16)>8+4+1(=13),符合要求,校验位⾄少是4位。
2014
13. 若x=103,y=-25,则下列表达式采⽤8位定点补码运算实现时,会发⽣溢出的是A x+y B -x+y C x-y D -x-y
答案:C
8位原码和反码能够表⽰数的范围是-127~127
8位补码能够表⽰数的范围是 -128~127 ⽤补码表⽰时:
10000000-11111111表⽰-128到-1, 00000000-01111111表⽰0-127
补码的1111 1111转换成原码就是1000 0001,也就是-1。
在补码中⽤(-128)代替了(-0),所以补码的表⽰范围为: -128~127
注意:(-128)没有相对应的原码和反码, (-128) = (10000000),把10000000取反加1就是-128.
14. float型整数⽤IEEE754单精度浮点格式表⽰,假设两个float型变量x和y分别在32为寄存器f1和f2中,若(f1)=CC900000H, (f2)=B0C00000H,则x和y之间的关系为:
A x<y且符号相同
B x<y且符号不同
C x>y且符号相同
D x>y且符号不同
答案:A
解析:将f1 f2 分别展开,分别判断符号位和阶码
(f1)=CC900000H=1 100 1100 1 001 0000 0000 0000 0000 0000
(f2)=B0C00000H=1 011 0000 1 100 0000 0000 0000 0000 0000在x,y同为负数的情况下,x的阶码为26,尾数为1.125;y的阶码为-30,尾数为1.5,则y>x
2015
13、由 3 个“1”和 5 个“0”组成的 8 位⼆进制补码,能表⽰的最⼩整数是()
A.-126 B.-125
C.-32 D.-3
答案B
⼆进制的补码表⽰。
对于这道题,我们应该怎样考虑?
选择题的话,可以投机⼀点,直接将选项转为补码就⾏了。
但要是在问答题中,由于最⼩的数肯定是负数,⾸先第⼀位就是1 ,⼜因为补码要取反,所以最⼩的数应该是 1,0000011.除开符号位取反加1后变成1,1111101。这个数的⼗进制是-125
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论