zoukankan      html  css  js  c++  java
  • 《信息安全系统设计基础》第三周学习总结

    《信息安全系统设计基础》第三周学习总结

    1.理解二进制在计算机中的重要地位

    二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。计算机中的二进制则是一个非常微小的开关,用“开”来表示1,“关”来表示0。

    20世纪被称作第三次科技革命的重要标志之一的计算机的发明与应用,因为数字计算机只能识别和处理由‘0’.‘1’符号串组成的代码。其运算模式正是二进制。它只使用0、1两个数字符号,非常简单方便,易于用电子方式实现。

    2.掌握布尔运算在C语言中的应用

    C语言的一个很有用的特性就是它支持按位布尔运算。事实上,我们在布尔运算中使用的那些符号就是C语言所使用的:就是OR(或),&就是AND(与),~就是NOT(取反),而^就是EXCLUSIVE-OR(异或)。这些运算能运用到任何“整型”的数据类型上

    二进制乘法

    #include <iostream.h>
    void main(int a[],int b[],int m,int n,int e1[])
    {
        int i,j;
    
         if(m==n)
      for(i=0;i<n;i++)
        if(a[i]==0||b[i]==0) e1[i]=0;
        else e1[i]=1;
      if(m>n)
     {
     j=m-n;
       for(i=j;i<m;i++)
         if(i<j) e1[i]=0;
         else {
     if(a[i]==0||b[i-j]==0) e1[i]=0;
                else e1[i]=1;
                 
    }
    

    二进制加法

    #include <iostream.h>
     void li2add(int a[],int b[],int m,int n,int ee[])
    {
        int i,j,k,t=0;
    
         if(m==n)
     {
     for (i=n;i>0;i--)
         {
    int l=i-1;
           k=t+a[l]+b[l];
           ee[i]=k%2;
           t=k/2;
            
        }
       ee[0]=t;
    

    二进制异或

    #include <iostream.h>
    void li2and(int a[],int b[],int m,int n,int e1[])
    {
        int i,j;
    
        if(m==n)
         for(i=n-1;i>0;i--)
         if(a[i]!=b[i]) e1[i]=1;
         else e1[i]=0;
         if(m>n)
     {
         for(i=0;i<m-n;i++)
         if(a[i]==0) e1[i]=0;
         else e1[i]=1;
       j=m-n;
       for(i=j;i<m;i++)
         if(a[i]!=b[i-j]) e1[i]=1;
         else e1[i]=0;
        
    }
    

    3.有符号整数、无符号整数、浮点数的表示

    %d 十进制有符号整数

    %u 十进制无符号整数

    %f 浮点数

    %s 字符串 (是指的输出字符串,在printf中能够输出字符串的值,后面的参数为 “数组的指针”)

    举例:
    
    #include<stdio.h>
    struct student{
    char a[20];
    char id[20];
                                    }; 
    int main(void)
    {
                               struct student stu1;
                                            printf("请输入一个字符串...
    ");
                                 scanf("%s",stu1.a); 
                                           printf("输入的字符串是:
    ");
                                 printf("%s",stu1.a);
    }
    

    %c 单个字符

    %p 指针的值

    %e 指数形式的浮点数

    %x, %X 无符号以十六进制表示的整数

    %o 无符号以八进制表示的整数

    %g 自动选择合适的表示法

    补码 原码 反码的重要性

    引入原码 反码 和补码的目的就是为了解决减法问题,因为计算机CPU的运算器中只有加法器,要把减法转化成加法来计算。

    举个例子,A表示十进制数“+16”,B表示十进制数“-19”,把这两个数的原码直接相加,得:

    A=+16 (A)原=00010000

    B=-19 (B)原=10010011

    00010000
    +
    10010011

    ————

    10100011

    其结果符号位为1是负数,其数值位为100011,即等于十进制数“-35”,这显然是错的结果。

    再比如,十进制数“+16”与“+19”的原码直接相减,得

    00010000

    00010011

    ————

    11111101

    结果为“-125”,这又是错的。

    但是引入补码后,加减法都可以用加法来实现,如“-16+11”的运算:

    11110000 -16的补码

    00001011 11的补码

    ————

    11111011 -5的补码

    如果是“-16-11”,那么就转化为加法运算“-16+(-11)”

    11110000 -16的补码

    11110101 -11的补码

    ————

    111100101 -27的补码

    在字长为8位的系统中,最高位所产生的进位被自然丢弃,运算结果的机器数为11100101,是-27的补码形式,结果正确。

    总结:

    1.二进制数中,两数的补码之和等于两数和的补码。

    2.补码=反码+1

    3.反码=原码除符号位外其它数值取反(即该数的绝对值取反),即“0”变“1”,“1”变“0”。

    4.任何正数的原码 反码 补码的形式完全相同(即都是自身,不变)

    5.在计算机中,有符号的数都是采用补码来表示的。

    6.计算的时候,符号位也参与运算

    教材学习中的问题和解决过程

    (一个模板:我看了这一段文字 (引用文字),有这个问题 (提出问题)。 我查了资料,有这些说法(引用说法),根据我的实践,我得到这些经验(描述自己的经验)。 但是我还是不太懂,我的困惑是(说明困惑)。【或者】我反对作者的观点(提出作者的观点,自己的观点,以及理由)。 )

    • 问题1:什么是C语言中溢出?
    • 问题1解决方案:数据类型超过了计算机字长的界限而出现的数据溢出;后来又想了想溢出的原因在哪里为什么会有溢出呢?我自己的想法是:假设定义数组int Array[10],而在调用时使用Array[11] 或存放的数据超过int类型容量等, 内存缓冲区就可能会溢出。我上网看了看资料,具体就是当应用程序读取用户数据,复制到应用程序开辟的内存缓冲区中,却无法保证缓冲区的空间足够,就会产生溢出。
    • 问题2:产生溢出会有什么影响?
    • 问题2解决方案:我查了资料如果向一个固定大小的内存写入超过其大小的数据,黑客会利用软件系统溢出漏洞进行攻击,所以也是个很严重的问题。- ...

    代码调试中的问题和解决过程

    • 问题1:保存编写后的代码无法退出
    • 问题1解决方案:最后只能打开文件夹进行保存,但还是不明白为什么会出现这种提示,问了舍友他们没有给出答案

    代码托管

    (statistics.sh脚本的运行结果截图)

    上周考试错题总结

    • 错题1及原因,理解情况
    • 错题2及原因,理解情况
    • ...

    结对及互评

    点评模板:

    • 博客中值得学习的或问题:
      • xxx
      • xxx
      • ...
    • 代码中值得学习的或问题:
      • xxx
      • xxx
      • ...
    • 其他

    本周结对学习情况

    - [结对同学学号1](博客链接)
    - 结对照片
    - 结对学习内容
        - XXXX
        - XXXX
        - ...
    

    其他(感悟、思考等,可选)

    xxx
    xxx

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 200/200 2/2 20/20
    第二周 300/500 2/4 18/38
    第三周 500/1000 3/7 22/60
    第四周 300/1300 2/9 30/90

    尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
    耗时估计的公式
    :Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

    参考:软件工程软件的估计为什么这么难软件工程 估计方法

    • 计划学习时间:XX小时

    • 实际学习时间:XX小时

    • 改进情况:

    (有空多看看现代软件工程 课件
    软件工程师能力自我评价表
    )

    参考资料

  • 相关阅读:
    Go
    Go
    Go
    Go
    Go
    Go
    爬虫常用相关库
    Go
    python基础第7天(day19)
    python基础第五天(day17)元组,集合,字符串操作 字符编码:
  • 原文地址:https://www.cnblogs.com/lyx1996/p/7638760.html
Copyright © 2011-2022 走看看