第二章习题-ddg(2)

2018-11-20 18:49

unsigned long long arraysize=count*(unsigned long long)sizeof(int); int *myarray = (int *) malloc(arraysize);

已知C语言标准库函数malloc的原型声明为“void *malloc(size_t size);”,其中,size_t定义为unsigned

int类型,则上述改动能否消除整数溢出漏洞?若能则说明理由;若不能则给出修改方案。

32. 已知一次整数加法、一次整数减法和一次移位操作都只需一个时钟周期,一次整数乘法操作需要10

个时钟周期。若x为一个整型变量,现要计算55*x,请给出一种计算表达式,使得所用时钟周期数最少。

33.假设x为一个int型变量,请给出一个用来计算x/32的值的函数div32。要求不能使用除法、乘法、

模运算、比较运算、循环语句和条件语句,可以使用右移、加法以及任何按位运算。 34. 无符号整数变量ux和uy的声明和初始化如下: unsigned ux=x; unsigned uy=y;

若sizeof(int)=4,则对于任意int型变量x和y,判断以下关系表达式是否永真。若永真则给出证明;

若不永真则给出结果为假时x和y的取值。 (1)(x*x) >= 0 (2)(x-1<0) || x>0

(3)x<0 || -x<=0 (4)x>0 || -x>=0 (5)x&0xf!=15 || (x<<28)<0 (6)x>y==(-x<-y) (7)~x+~y==~(x+y) (8)(int) (ux-uy) == -(y-x) (9)((x>>2)<<2) <= x (10)x*4+y*8==(x<<2)+(y<<3) (11)x/4+y/8==(x>>2)+(y>>3) (12)x*y==ux*uy (13)x+y==ux+uy (14)x*~y+ux*uy==-x 35. 变量dx、dy和dz的声明和初始化如下: double dx = (double) x; double dy = (double) y; double dz = (double) z;

若float和double分别采用IEEE 754单精度和双精度浮点数格式,sizeof(int)=4,则对于任意int型变

量x、y和z,判断以下关系表达式是否永真。若永真则给出证明;若不永真则给出结果为假时x和y的取值。

(1)dx*dx >= 0 (2)(double)(float) x == dx (3)dx+dy == (double) (x+y) (4)(dx+dy)+dz == dx+(dy+dz)

(5)dx*dy*dz == dz*dy*dx (6)dx/dx == dy/dy 36. 在IEEE 754浮点数运算中,当结果的尾数出现什么形式时需要进行左规,什么形式时需要进行右规?

如何进行左规,如何进行右规?

37.在IEEE 754浮点数运算中,如何判断浮点运算的结果是否溢出?

38. 分别给出不能精确用IEEE 754单精度和双精度格式表示的最小正整数。 39.采用IEEE 754单精度浮点数格式计算下列表达式的值。

(1)0.75+(– 65.25) (2)0.75–(– 65.25)

40. 以下是函数fpower2的C语言源程序,它用于计算2x的浮点数表示,其中调用了函数u2f,u2f用于

将一个无符号整数表示的0/1序列作为float类型返回。请填写fpower2函数中的空白部分,以使其能正确计算结果。

1 float fpower2(int x) 2 { 3 unsigned exp, frac, u; 4 5 if (x< ) { /* 值太小,返回0.0 */

6 exp = ; 7 frac = ; 8 } else if (x< ) { /* 返回非规格化结果 */ 9 exp = ; 10 frac = ; 11 } else if (x< ) { /* 返回规格化结果 */ 12 exp = ; 13 frac = ; 14 } else { /* 值太大,返回+∞ */

15 exp = ; 16 frac = ; 17 } 18 u = exp << 23 | frac; 19 return u2f(u); 20 }

41. 以下是一组关于浮点数按位级进行运算的编程题目,其中用到一个数据类型float_bits,它被定义为

unsigned int类型。以下程序代码必须采用IEEE 754标准规定的运算规则,例如,舍入应采用就近舍入到偶数的方式。此外,代码中不能使用任何浮点数类型、浮点数运算和浮点常数,只能使用float_bits类型;不能使用任何复合数据类型,如数组、结构和联合等;可以使用无符号整数或带符号整数的数据类型、常数和运算。要求编程实现以下功能并进行正确性测试,需要针对参数f的所有32位组合情况进行处理。 (1)计算浮点数f的绝对值|f|。若f为NaN,则返回f,否则返回|f|。函数原型为: float_bits float_abs(float_bits f);

(2)计算浮点数f的负数-f。若f为NaN,则返回f,否则返回-f。函数原型为: float_bits float_neg(float_bits f);

(3)计算0.5*f。若f为NaN,则返回f,否则返回0.5*f。函数原型为: float_bits float_half(float_bits f);

(4)计算2.0*f。若f为NaN,则返回f,否则返回2.0*f。函数原型为: float_bits float_twice(float_bits f);

(5)将int型整数i的位序列转换为float型位序列。函数原型为: float_bits float_i2f(int i);

(6)将浮点数f的位序列转换为int型位序列。若f为非规格化数,则返回值为0;若f是NaN或±

∞或超出int型数可表示范围,则返回值为0x80000000;若f带小数部分,则考虑舍入。函数原型为:

int float_f2i(float_bits f);


第二章习题-ddg(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2017秋政治学习材料

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: