• 深入理解计算机系统(第三版)第二章重要内容摘要


    第二章

    2.1.3寻址和字节顺序

    #include <stdio.h>
    typedef unsigned char *byte_pointer;
    void show_bytes(byte_pointer start,size_t len){
        size_t i;
        for(i=0;i<len;++i)
            printf("%.2x",start[i]);
            printf("
    ");
    }
    void show_int(int x){
        show_bytes((byte_pointer)&x,sizeof(int));
    }
    void show_float(float x){
        show_bytes((byte_pointer)&x,sizeof(float));
    }
    void show_point(void* x){
        show_bytes((byte_pointer)&x,sizeof(void*));
    }
    void test_show_bytes(int val){
        int ival=val;
        float fval=(float)val;
        int *pval=&ival;
        show_int(ival);
        show_float(fval);
        show_point(pval);
    }
    int main(){
        int i=12345;
        test_show_bytes(i);
        return 0;
    }

     2.2.3补码编码

    有符号数的三种表示方法

    补码:

    反码:

     

    原码:

     

    2.3.3补码的非

     

    2.3.7除以2的幂

     2.4.2 IEEE浮点表示

     

     

     

       值1.0的位表示的阶码字段除了最高有效位为0之外,其它位都等于1。它的尾数值M=1,而它的阶码值E=$2^{k-1}-2^{k-1}$=0

     

    2.4.4舍入

     

     2.4.5浮点运算

    浮点加法不具有结合性

    浮点乘法不具有结合性和分配性

    2.4.6C语言中的浮点数

     

     第一章课后练习

    1.1

      A  加速比$S=T_{old}/T_{new}=frac{1}{(1-a)+frac{a}{k}}=frac{1}{(1-0.6)+frac{0.6)}{1.5)}}=1.25$

      B  $S=T_{old}/T_{new}=frac{1}{(1-a)+frac{a}{k}}$可推出$1.67=frac{1}{(1-0.6)+frac{0.6}{k}}  approx3$即3*100=300公里每小时

    1.2

      $2=frac{1}{(1-0.8)+frac{0.8}{k}}  approx2.66$

    第二章课后练习

    练习2.1

      A  $0x39A7F8 ightarrow001110011010011111111000$

      B  $1100100101111011 ightarrow0xC97B$

      C  $0xD5E4C ightarrow11010101111000101100$

      D  $1001101110011110110101 ightarrow0x26E7B5$

    练习2.2

    n $2^n(十进制)$ $2^n(十六进制)$
    9 512 0x200
    19 524288 0x80000
    14 16384 0x4000
    16 65536 0x10000
    17 131072 0x20000
    5 32 0x20
    7 128 0x80

    练习2.3

    十进制 二进制 十六进制
    0 00000000 0x00
    167 10100111 0xA7
    62 00111110 0x3E
    188 10111100 0xBC
    55 00110111 0x37
    136 10001000 0x88
    243 11110011 0xF3
    82 01010010 0x52
    172 10101100 0xAC
    247 11100111 0xE7

    练习2.4

      A  0x503c+0x8=0x5044

      B  0x503c-0x40=0x4ffc

      C  0x503c+64=0x503c+0x40=0x507c

      D  0x50ea-0x503c=0x50bd

    练习2.5

    int main(){
        int i=0x87654321;
        byte_pointer valp=(byte_pointer)&i;
        show_bytes(valp,2);
        return 0;
    }

      A

        小端法:21

        大端法:87

      B  

        小端法:2143

        大端法:8765

      C

        小端法:214365

        大端法:876543

    练习2.6

      A

        $0x00359141 ightarrow001101011001000101000001$

        $0x4A564504 ightarrow01001010010101100100010100000100$

      B

            001101011001000101000001

             01001010010101100100010100000100

        总共有21位匹配

      C

        串的头尾不匹配

    练习2.7

    int main(){
        const char *s="abcdef";
        show_bytes((byte_pointer)s,strlen(s));
        return 0;
    }

      616263646566

    练习2.8

    运算 结果
    a [01101001]
    b [01010101]
    ~a [10010110]
    ~b [10101010]
    a&b [01000001]
    a|b [01111101]
    a^b [00111100]

    练习2.9

    R G B 颜色 补集
    0 0 0 黑色 白色
    0 0 1 蓝色 黄色
    0 1 0 绿色 红紫色
    0 1 1 蓝绿色 红色
    1 0 0 红色 蓝绿色
    1 0 1 红紫色 绿色
    1 1 0 黄色 蓝色
    1 1 1 白色 黑色

    蓝色|绿色=蓝绿色

    黄色&蓝绿色=绿色

    红色^红紫色=蓝色

    练习2.10

    void inplace_space(int *x,int *y){
        *y=*x^*y;/* Step1 */
        *x=*x^*y;/* Step2 */
        *y=*x^*y;/* Step3 */
    }

    每个元素就是它自身的加法逆元(a^a=0)

    步骤 *x *y
    初始 a b
    第一步 a a^b
    第二步 b a^b
    第三步 b a

    练习2.11

      A变量first和last都为k+1

      B由上图可知第一步时last值就为0(a^a)了

      C去掉=即可

    void reverse_array(int a[],int cnt){
        for(int first=0,last=cnt-1;first<last;inplace_space(&a[first++],&a[last--]));
    }

    练习2.12

      Ax&0xFF

      Bx^~0xFF

      Cx|0xFF

    练习2.13

      $bis(x,y)$

      $bis(bic(x,y),bic(y,x)) ightarrow$x^y=(x&~y)|(~x&y)

  • 相关阅读:
    java线程池及创建多少线程合适
    消息队列消息积压了怎么办?
    Redis线程模型
    redis单线程如何支持高并发
    基于redis实现分布式锁
    PHP面试总结
    【转】Redis入门
    面试常考之二叉树
    计算机网络之面试常考
    操作系统之面试常考
  • 原文地址:https://www.cnblogs.com/GodZhuan/p/14249372.html
Copyright © 2020-2023  润新知