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

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

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("请输入一个字符串...\n");
                             scanf("%s",stu1.a); 
                                       printf("输入的字符串是:\n");
                             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小时

  • 改进情况:

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

参考资料

posted on 2017-10-08 21:53  吕宇轩  阅读(329)  评论(1编辑  收藏  举报