• 家庭作业汇总


    《深入理解计算机系统》家庭作业共计15分

    第二章(共计5分)

    ***2.66.

    写出代码实现如下函数int leftmost_one(unsigned x),函数遵循位级整数编码规则,假设数据类型int32位。代码最多只能包含15个算术运算、位运算和逻辑运算

    int leftmost_one(unsigned x)

    {

      if(x==0)

      {

        return x;

      }

      if(x>(1<<31))

      {

        return 0x80000000;

      }

      x|=(x>>1);

      x|=(x>>1);

      x|=(x>>1);

      x|=(x>>1);

      x|=(x>>1);

      x+=1;

      x=x>>1;

      return x;

    }

    **2.76.

    生成一段代码,将整数变量x乘以不同的常数因子K,为提高效率,只使用+-<<运算,对于下列K值写出执行乘法运算的C表达式,每个表达式中最多用3个运算

    A.K=5:  (x<<2)+x

    B.K=9:  (x<<3)+x

    C.K=30:  (x<<5)-(x<<1)

    D.K=-56:  (x<<3)-(x<<6)

    **2.82.

    一些数字的二进制表示是由形如0.yyyyy……的无穷串组成,y是一个k位的序列。例如1/3的二进制表示是0.010101……(y=01)

    A.设Y=B2Uk(y),这个数有二进制表示y。给出一个由Yk组成的公式表示这个无穷串的值  x=Y/(2^k-1)

    B.对于下列y值,串的数值是多少?

    (a)001  x=1/7

    (b)1001  x=3/5

    (c)000111  x=1/9

    第三章(共计2分)

    *3.54.一个函数的原型为int decode2(int x, int y, int z);

     

    int decode2(int x, int y, int z)
    {
        int k;
        z -= y; 
        k = z; 
        k<<= 15;
        k>>= 15;
        return  k*(z^x);
    }

    *3.69.

     

     

    long trace(tree_ptr tp)
    {
        long ret = 0;
        while(tp != NULL)
        {
            ret = tp->val;
            tp = tp->left;
        }
        return ret;
    }

    作用是从根一直遍历左子树,找到第一个没有左子树的节点的值。

    第六章(共计3分)

    **6.23

      假设要求设计一个每条磁道位数固定的旋转磁盘,已知每个磁道的位数是由最里层磁道的周长确定的,可以假设它就是中间那个圆洞的周长。因此如果把磁盘中间的洞做得大一点,每个磁道的位数就会增大,但是总的磁道数会减少。如果用r来表示盘面的半径,x*r表示圆洞的半径,那么x取什么值能使这个磁盘的容量最大?

      答:假设半径为r的磁盘总的磁道是K,磁道沿半径方向是均匀分布的。除掉内部的x*r,剩下的磁道数为 (1-x)*K。则总容量为2*pi*x*r*(1-x)*K,其中pi,r和K都是常数,变量只剩下x*(1-x)。所以这个函数在x = 0.5的时候最大。即x取0.5时磁盘容量最大。
    

    *6.26

      下面的表给出了一些不同的高速缓存的参数。对于每个高速缓存,填写出表中缺失的字段。m是物理地址的位数,C是高度缓存大小(数据字节数),B是以字节为单位的块大小,E是相联度,S是高速缓存组数,t是标记位数,s是组索引位数,b是块偏移位数。

    高速
    缓存

    m

    C

    B

    E

    S

    t

    s

    b

    1

    32

    2048

    4

    4

    128

    23

    7

    2

    2

    32

    2048

    4

    512

    1

    30

    0

    2

    3

    32

    2048

    8

    1

    256

    21

    8

    3

    4

    32

    2048

    8

    128

    2

    28

    1

    3

    5

    32

    2048

    32

    1

    64

    21

    6

    5

    6

    32

    2048

    32

    4

    16

    23

    4

    5

    第十章(共计1分)

    *10.7

    修改如图所示的cpfile程序,使得它用RIO函数从标准输入拷贝到标准输出,一次MAXBUF个字节

    答:

    int main(int argc, char **argv)
    {
        int n;
        rio_t rio;
        char buf[MAXBUF];
    
        Rio_readinitb(&rio, STDIN_FILENO);
        while((n = Rio_readnb(&rio, buf, MAXBUF)) != 0)
            Rio_writen(STDOUT_FILENO, buf, n);
    } 

     第八章(共计4分)

    **8.14

    下面这个程序会输出多少个“hello”输出行?



    答:主进程只打印一行。主进程的直接子进程会打印一行,子进程的子进程再打印一行。所以一共输出3个“hello”输出行。

    **8.15

    下面这个程序会输出多少个“hello”输出行?



    答:因为这里的子进程是return而不是exit,说明两个子进程都要到回到main函数去打印那里的hello。所以一共输出5个“hello”输出行。 

  • 相关阅读:
    MongoDB 基本概念
    MongoDB 设置参数
    MongoDB 操作数据库
    MongoDB 目录分析、基础命令、参数设置
    Windows下MongoDB的下载安装、环境配置
    MongoDB 简介
    SQL与NoSQL
    es6 箭头函数(arrow function) 学习笔记
    WebPack 简明学习教程
    vue自定义指令
  • 原文地址:https://www.cnblogs.com/20135228guoyao/p/4980427.html
Copyright © 2020-2023  润新知