• 《信息安全系统设计基础》家庭作业2.65、2.71、4.57、7.7、8.18、8.23


    《信息安全系统设计基础》家庭作业2.65、2.71、4.57、7.7、8.18、8.23

    2.65

    • 解读题目:当无符号数x包含偶数个1时,返回值为1,否则为返回值为0,假设x的数据类型是int 有w=32位。
    • 解题思路:要求x所包含的1的个数,可以对x的每个位进行异或运算。如果得到的结果是0,那么就说明x包含偶数个1,则返回值为1,;如果得到的结果是1,那么说明x包含奇数个1,则返回值为0。
    • 代码编写过程:由于x是个32位int类型数,所以
      ①首先采用折半缩小规模的方法进行逐位异或;
      ②最后得到的x值再与1进行与运算就会得到一个32位中前31均为0,尾数是0或者是1(用于判断是原x包含奇数还是偶数个1);
      ③返回这个值就完成了题目需求。
    • 代码编写:
    int even_ones(unsigned x){
    x ^= (x >> 16);//等同于x=x^(x>>16)
    x ^= (x >> 8); //等同于x=x^(x>>8)
    x ^= (x >> 4); //等同于x=x^(x>>4)
    x ^= (x >> 2); //等同于x=x^(x>>2)
    x ^= (x >> 1); //等同于x=x^(x>>1)
    return !(x&1);
    }
    

    截图:

    • 运行结果如下:

      即当a为10e5+0时,返回值为0
      若a为10e5+1时,返回值为1

    2.71
    A.得到的结果是unsigned,而并非扩展为signed的结果。
    B.使用int,将待抽取字节左移到最高字节,再右移到最低字节即可。

    //代码编写如下:
    int xbyte(unsigned word, int bytenum){
        int ret = word << ((3 - bytenum)<<3);
        return ret >> 24;
    }
    

    4.57
    A.发现加载/使用冒险的逻辑公式:

    ( E_icode in {IMRMOVL, IPOPL} && E_dstM in {d_srcA, d_srcB}) 
    &&
    !(E_icode == IMRMOVL && D_icode == IPUSHL);
    

    B.

    e_valA = [ (E_icode==IPUSH) && (M_dstM==E_srcA) : m_valM;
                1 : E_valA; 
             ];
    

    7.7

    输出错误的原因是全局符号x被多重定义,若想输出正确的值,可以将bar5.c中的x变成局部变量,将其移到void f()的括号中即可。

    8.18

    画出进程图如下,可知在A.112002 B.211020 C.102120 D.122001 E.100212中,A/C/E是可能的。

    8.23
    原因:在第一个信号发给父进程之后,父进程进入handler,并且阻塞了SIGUSR2,此时第二个信号依然可以发送,但是之后的3个信号就会被抛弃。所以只有2个信号被接收。<font>

  • 相关阅读:
    IT系统
    大型云计算平台的搭建以及解决方案(超详细)(http://c.biancheng.net/view/3961.html)
    E
    Codeforces Round #694 (Div. 1) B. Strange Definition
    Codeforces Round #691 (Div. 2) D. Glass Half Spilled
    Educational Codeforces Round 100 (Rated for Div. 2) 1463D. Pairs
    (指针主席树简单介绍)第k小数
    11月刷题记录
    (补题)牛客国庆集训派对day4
    蓝桥杯前最后的挣扎(雾
  • 原文地址:https://www.cnblogs.com/alovera/p/6119621.html
Copyright © 2020-2023  润新知