进位记数制及其相互转换
十进制、二进制、八进制、十六进制
真值、机器数(原码、反码、补码)
字符与字符串的编码(小端和大端方式存储 )
数据校验
奇偶校验、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//双精度值==单精度值,结果出错。