深入理解计算机系统第二章习题

题2.72

A.sizeof(int)返回的是size_t类型,是无符号类型,maxbytes-sizeof(val)时会被转换为无符号类型,所以条件>=0恒成立。

B.if(maxbytes >= sizeof(val))

 

题2.73

int saturating_add(int x, int y)

{

     int Tmin = 1<<(sizeof(int) << 3 - 1);

     int Tmax = 1<<(sizeof(int) << 3 - 1) - 1;

    int sum = x+y;

     if ((x < 0) && (y < 0) && (sum >= 0))

        return Tmin;

     if ((x >= 0) && (y >= 0) && (sum < 0))

        return Tmax;
     return  sum;
}

 

题2.74 

 仅仅考虑符号位的变化。

int  tsub_ovf(int x; int y)
{
    int z = x - y;
    unsigned int msb = 1 << (sizeof(int) << 3 - 1);
    return (z&msb == y&msb) && (z&msb != x&msb);
}

 

题2.75

unsigned unsigned_high_prod(unsigned x, unsigned y)
{
    int w = sizeof(int)<<3;
    return signed_high_prod(x,y) + (x>>(w-1))&y + (y>>(w-1))&x;
}

题2.84

A  E=2,M=5/4,f = 1/4, V = 1.25*2^2

B  最大的整数奇数,那么二进制位表示时,最末尾肯定是1,最大的,所以其他位也为1。n位小数(0.11....11  n个1)。

    以浮点数表示且不舍入,所以E = n;指数k位,因为 E= e - Bias,Bias = 2^(k-1) -1 , e =n-1+2^(k-1), f = 2^(n + 1) - 1; M = 1+f/(2^(n+1))

C  最小的规格化数,e为1,其他位为0,E =1 - (2^(k-1) - 1) = 2- 2^(k-1); M = 1; V = 1 *2^(2-2^(K-1));

其倒数1/V = 2^(2^(k-1)-2),对应E = 2^(k-1)-2 , M = 1, f=0。

 

posted @ 2015-03-13 00:03  amongv587  阅读(196)  评论(0编辑  收藏  举报