CSAPP(第三版)第二章答案

2.30

// 补码发生溢出返回0 否则返回1
int tadd_ok(int x, int y){
    int sum = x + y;
    if((x>0&&y>0&&sum<0)||(x<0&&y<0&&sum>=0)){
        return 0;    
    }else{
        return 1;
    }
}

2.31

这个函数只会返回真

假设x+y发生正溢出,则sum = x+y-2^w(w表示位数)
sum-x = y-2^w   而y-2^w一定满足发生负溢出条件
所以 sum-x = y-2^w + 2^w = y

2.32

y取Tmin = -2^(w-1)时,x取任何值都会产生错误
y =  -2^(w-1)
-y = 2^(w-1) 发生正溢出 -y = 2^(w-1) - 2^w = -2^(w-1)
故 y = Tmin 时 , y = -y

2.42

int div16(int x){
    int bias = (x >> 31) & 0xF;
    // 如果x是正数 bias = 0
    // 如果x是负数 bias = 1111B = (1 << 4) - 1
    return (x + bias) >> 4;   
}

你可能感兴趣的:(csapp,算法)