2018-2019-1 20165202 《信息安全系统设计基础》第二周学习总结
教材学习内容总结
一、实验楼实验三总结
-
gcc编译
-
使用c99特性
gcc -o c99 -std=c99 c99.c
-
编译为32位机器码
gcc -o m32 -m32 m32.c
-
-
教材导读
-
无符号编码基于传统的二进制表示法,表示大于等于零的数字。补码编码(有符号整数)可以为正或者负的数字。浮点数编码表示实数的科学计数法的以2位基数的版本。
-
进制转换:以二进制结果作为中介。
-
字节顺序:在几乎所有的机器上,多字节对象都被存储为连续的字节序列,对象的地址为所使用字节中最小的地址。小端法:最低有效字节在前;大端法则反之。需注意,比如0x12345678,78是低位,12是高位。
-
执行show-bytes.c。
-
位运算与逻辑运算:位运算是指两个或多个数值逐位运算,比如1011|0101=1111;逻辑运算只有真假即true false;非0即为真,0为假。比如1011||0101,1011和0101都是非0,所以等同于1||1,结果为真。
-
0扩展:[1,0,1,1]->[
0
,0
,0
,1,0,1,1];符号位扩展[1,0,1,1]->[1
,1
,1
,1,0,1,1]。 -
整数运算的溢出:如9[1001]+12[1100]=21[10101],取4位的话5[0101]=21 mod 16。整数运算实际上是一种模运算形式。
-
浮点数表示对形如V=x * 2^y的有理数进行编码。不太关注运算的精确性,而把实现的速度和简便性看得比数字精确性更重要。
-
IEEE浮点标准用V = (-1)^s * M * 2^E的形式来表示一个数。其中s(sign)称符号,M(尾数)是二进制小数
-
整数与浮点数转换规则:
int->float :不会溢出,可能舍入 int/float->double :保留精确数值 double->float :可能溢出成无穷,可能被舍入。 float/double->int :向0舍入。
-
教材学习中的问题和解决过程
-
问题1:如何理解IEEE浮点标准?
-
问题1解决方案:需要做的是先记住几个公式:
规格化值: E=e-Bias Bias=2^(k-1)-1 M=1+f e[k-1];f[n-1]
非规格化值: E=1-Bias Bias=2^(k-1)-1 M=f e[k-1];f[n-1]
特殊值: 阶码(e)全为1时,小数域(f)全为0时,得到的值表示无穷,小数域(f)不全为0时,结果值被称为“NaN”(Not a Number)。
了解这些,来看书上的示例:
计算过程已经标注在图上。
代码调试中的问题和解决过程
- 问题1:习题2.11实现将一个数组元素头尾依次对调。
- 问题1解决方法:
#include <stdio.h>
void inplace_swap(int *x,int *y){
*y=*x^*y;
*x=*x^*y;
*y=*x^*y;
}
void reverse_array(int a[],int cnt){
int first,last;
for(first=0,last=cnt-1;first<last;first++,last--)
inplace_swap(&a[first],&a[last]);
}
void main(){
int num[5]={1,2,3,4,5};
int i=0;
reverse_array(num,5);
for(i=0;i<5;i++){
printf("%d ",num[i]);
}
}
运行结果截图:
[代码托管]
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 195/195 | 1/1 | 10/10 | |
第三周 | 314/706 | 1/2 | 15/25 |
-
计划学习时间:12小时
-
实际学习时间:15小时