家庭作业

家庭作业

第二章

2.62

分析:判断x移位之后是否还是全为1

bool int_shifts_are_logical()  
{  
    int x = ~0x00;  
    x >>= 1;  
    return ~x;  
}  

2.71

A. packed_t是无符号数,而它包装的4个字节都是有符号数,1byte的包装在无符号数中的有符号数扩展后符号位并没有扩展。例如,1byte的0xFF表示-1,而扩展成32位后应该为0xFFFFFFFF。而按照原函数中所示,扩展后结果是0x000000FF

B.

int xbyte(packed_t word , int bytenum)
{
    return (word << ((3 - bytenum) << 3)) >> 24;
}

2.79

int fiveeighths(int x)  
{  
    int w = sizeof(int) << 3;    
    int x_lmb = x >> (w - 1);    
    x_lmb && (x = x + 7);    
    x = x >> 3;        
    return x + (x << 2);  
}  

2.80

A. ~((1 << n) - 1) 【注意此时0<n<w】

B. ~(~0 << n) << m

2.83

浮点数最高位为符号位。

先处理-0、+0比较的情况:

!(ux<<1)&&!(uy<<1)

x为正,y为正:

(!sx && !sy && (ux >= uy))

x为负,y为负:

(sx && sy && (ux <= uy))

x为正,y为负:

!sx&&sy

以上式子使用||连接起来就是最终答案:

(!sx && sy) || (sx && sy && (ux <= uy)) || (!sx && !sy && (ux >= uy))

2.84

A. E = 2; M = 5/4; f = 1/4; V = 5.0

B. n位小数全为1。 E = n; M = 2 - 1/(2^n); f = 1 - 1/(2^n); V = 2^n * ( 2 - 1/(2^n) ) = 2^(n + 1) - 1

C. 最小规格化数: E = 2 - 2^(k - 1); M = f = 2^(-n); V = 2^E * M; 倒数为1/V

2.86

Hex M E V
0x8000 0 -62 -
0x3f01 257/256 0 257*2^(-8)
0x4700 1 8 -
0x00ff 255/256 -62 255*2^(-70)
0xff00 - - -
0x3aa0 416/256 -5 416*2^(-13)

2.87

1 01110 001  -9/16 1 0110 0010 -9/16
0 10110 101 208 0 1110 1010 208
1 00111 110 -7/1024 1 0000 0111 -7/1024
0 00000 101 

6/2^17

0 0000 0000 0
1 11011 000  -2^12 1 1111 0000 负无穷
0 11000 100 768 0 1111 0000 正无穷
原文地址:https://www.cnblogs.com/sjy519/p/6106962.html