《信息安全系统设计基础》第三周学习总结
《信息安全系统设计基础》第三周学习总结
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小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)