课后作业汇总

课后作业:2.90,2.82,3.55,3.62,8.11,8.12,9.11,9.12

2.90:

 

A: 格式    SEEEEEEE    EMMMMMMM    MMMMMMMM    MMMMMMMM 

pi的二进制数表示为:0 10000000 10010010000111111101011,

S: 为0,是个正数。 
      E:为 10000000  转为10进制为128,128-127=1,即实际指数部分为1. 
      M:为 10010010000111111101011。 这里,在底数左边省略存储了一个1,使用 实际底数表示为 1.10010010000111111101011 , 它表示的二进制小数值为:11.10010010000111111101011 

B.根据2.82,可知1/7的表示为0.001001[001]..., 所以22/7为11.001001001001001[001]... 

C.从第9位开始不同。

2.82

A. 

令x为无穷序列表示的值,可以得到

x*2^k = Y + x

所以

 x = Y/(2^k - 1)

 

B. (a) y=001,k=3,带入公式得:

x=1/7

(b) y=1001,k=4,带入公式得:

x=9/15 = 3/5

(c)y=000111,k=6,带入公式得:

x=7/63 = 1/9

3.55

大概算法如下: 
x的高32位为xh,低32位为xl。 
y的符号位扩展成32位之后为ys(ys为0或者-1)。

 dest_h = (xl*ys)_l + (xh*y)_l + (xl*y)_h 

dest_l = (xl*y)_l

注意,所有的乘法都是unsigned*unsigned。 
也就是说对于 1*(-1),如果存入两个寄存器中,那么高32位是0,低32位是-1。  相当于 1*(UNSIGNED_MAX)。

3.62

 

A:M = 76/4 = 19;

B: i在edi中,j在ecx中; 

C:

int transpose(int M, int A[M][M]) 


    int i,j;    
    for(i=0; i<M; ++i)   

  { 
        int *a = &A[i][0];  

       int *b = &A[0][i];      

   for(j=0; j<i; ++j)       

  { 

            int t = *a;      

            *a = *b;            

            *b = t;            

              ++a;          

             b += M;      

 }    

}

8.11

4行 

8.12

8行 

9.11

答案:

 

 

 

9.12

答案:

 

posted on 2015-11-21 14:28  20135232  阅读(268)  评论(0编辑  收藏  举报