zoukankan      html  css  js  c++  java
  • 《信息安全系统设计基础》家庭作业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>

  • 相关阅读:
    将一个 LIB 中的所有 OBJ 名称和类型输出到一个物理文件
    用一条命令 转换 Iseries tables t到 CSV
    用CL提取系统值
    程式中檢查是否潤年的新方法
    Ubuntu 忘记root密码 和修改密码
    excel 数组公式入门
    BAT批处理
    row_number() over(partition byCOL1 order by COL2)
    row_number( )、rank( )、dense_rank( )、ntile( )函数的用法 (SQL2005以上)
    Sql 常用日期计算
  • 原文地址:https://www.cnblogs.com/alovera/p/6119621.html
Copyright © 2011-2022 走看看