zoukankan      html  css  js  c++  java
  • 第三章家庭作业

    小组成员:20135310陈巧然 20135305姚歌

    选题:3.56

    分值:2分

    题目:

     

    解题思路及答案:

    A.

    寄存器 变量
    esi    x
    ebx    n
    edi    result
    edx    mask

    B.

    result:0x55555555

    mask:0x80000000

    C.

    mask !=0

    D.

    第十行,逻辑右移了n位

    E.

    第八行,result ^= (mask & x)

    F.

    int loop(int x, int n)

    {
        int result = 0x55555555;
        int mask;
        for(mask = 0x80000000; mask != 0; mask = mask>>n){
            result ^= (mask & x);
        }
        return result;
    }

    选题:3.67

    分值:3分

    题目:

    解题思路及答案:

    A. 
    e1.p: 0
    e1.x: 4
    e2.y: 0
    e2.next: 4

    B.
    总共需要8个字节。

    C.
    不难知道,赋值前后都应该是整数。
    edx就是参数up(一个指针)。
    最后结果是用eax - (edx)得到的,说明(edx)是整数,即up->___ 为整数,肯定是表示的e2.y。
    再看看之前的eax,eax是由(eax)所得,说明到第3行后,eax是个指针。
    它是由(ecx)得到的,说明ecx在第二行也是个指针。
    而ecx是通过*(up+4)得到的,所以ecx是一个union指针next,即up->e2.next;
    到第三行,eax为*(ecx),且是一个指针,所以eax在第三行为int* p,即up->e2.next->e1.p。
    所以,赋值符号后面的表达式就为  *(up->e2.next->e1.p) - up->e2.y

    再看看前面。
    最终赋值的地址是 ecx+4,而ecx那时候是一个next指针,而(next+4)必须是一个int,也不难推测它是e1.x。因此前面就为 up->e2.next->e1.x。
    结果如下:

    void proc(union ele *up)
    {
        up->e2.next->e1.x = *(up->e2.next->e1.p) - up->e2.y;
    }

  • 相关阅读:
    linux离线安装mysql
    SpringBoot配置SSL证书
    java在liunx下备份mysql数据,恢复数据
    Redis的缓存穿透,缓存击穿,缓存雪崩
    Spring缓存注解
    Advanced Algorithm Scripting
    Arguments Optional
    Everything Be True
    Binary Agents
    Steamroller
  • 原文地址:https://www.cnblogs.com/20135305yg/p/4901129.html
Copyright © 2011-2022 走看看