2017-2018-1 20155304 《信息安全系统设计基础》第三周学习总结
2017-2018-1 20155304 《信息安全系统设计基础》第三周学习总结
教材学习内容总结
第二章 信息的表示和处理
- 二进制在计算机中的重要地位:
现代计算机存储和处理信息以二值信号表示,这些二进制数字称为位。计算机用几种不同的二进制表示来编码数值。
- 有符号整数、无符号整数、浮点数的表示
计算机将信息按位编码,通常组织成字节序列。用不同的编码方式表示整数、实数 和 字符串。
整数
1. 整型数据类型
c语言标准定义的每种数据类型必须能够表示的最小的取值范围中,正数和负数的取值范围是对称的
数据类型long long是在ISO C99中引入的(编译:gcc -std=c99)
2. 无符号数的编码
0-(2^w)-1中的每一个整数和长度为w的位向量是一一对应的
3. 补码编码(有符号数的编码)
正数的补码=原码
负数的补码=原码各位取反再加1
补码的范围:-2(w-1)~2(w-1)-1,即|TMin|=|TMax|+1(因为非负数中0的存在)
4. 有符号数和无符号数的转换
无————>有:U2Tw函数
以2的w-1次方为界限:小于它——保持不变;大于它——转换为负数值
有————>无:T2Uw函数
非负数——保持不变;负数——转换成大正数
5. 扩展
零扩展:在开头添0
符号扩展:添加最高有效位的值的副本
浮点数
1. 二进制小数
小数的二进制表示法只能表示那些能够被写成x X (2^y)的数,其他的值只能近似的表示
以小数点为界:左边第i位,权重为2的i次幂;右边第i位,权重为1/2的i次幂
2. IEEE浮点表示
用V = (-1)s * M * 2E的形式来表示一个数
在float中,s、exp和frac字段分别为1位、k = 8 位和n = 23位,得到一个32位的表示
在double中,s、exp和frac字段分别为1位、k = 11 位和n = 52位,得到一个64位的表示
3. 舍入
舍入运算:找到和数值x最接近的匹配值x',可以用期望的浮点形式表示出来
4. 浮点运算
浮点加法:浮点加法是可交换的;浮点加法不具结合性;大多数值的浮点加法都有逆元,除了无穷和NaN;浮点加法满足单调性
浮点乘法:浮点乘法是可交换的;浮点乘法不具有结核性;浮点乘法的单位元为1.0;浮点乘法在加法上不具备分配性;在一定条件下满足单调性
5. c语言中的浮点数
int → float 不会溢出但有可能舍入
int/float → double 结果保留精确数值
double → float 可能溢出为±∞,由于精确度较小也有可能被舍入
float/double → int 向零舍入,可能溢出
教材学习中的问题和解决过程
通过以前的学习也知道一张ASCII字符码表,但是对于使用使用ASCII作为字符码的任何系统上会得到相同结果,与字节顺序和字大小规则无关并不太理解。
在虚拟机下使用man ascii得到一张ASCII表,并用书上的例子
const cahr *s ="abcdef"
show_bytes( (byte_pointer)s,strlen(s));
解决了这一问题。
其他(感悟、思考等,可选)
已经学了三周的《深入理解计算机系统》,这周学到的知识,补码,反码等,包括溢出等知识点虽然以前在计算机导论和c语言基础的课程上都有所了解,但是将这些知识点放在一个全新的Linux系统下理解就有很多的不一样了,不论在理解方面还是运用的方面都是新的知识。需要多加练习多多巩固,虽然这周的知识都偏向于基本知识,但是编程的需要也是必不可少的,对于一些代码段的理解还是需要自己动手去实践编译和运行才能感悟更深。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 47/100 | 1/1 | 10/10 | |
第二周 | 180/200 | 1/1 | 10/10 | |
第三周 | 200/300 | 1/1 | 10/10 |